Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以创建一个接受参数和JSON的C#Web.Api方法吗?_C#_Json_Asp.net Web Api - Fatal编程技术网

我可以创建一个接受参数和JSON的C#Web.Api方法吗?

我可以创建一个接受参数和JSON的C#Web.Api方法吗?,c#,json,asp.net-web-api,C#,Json,Asp.net Web Api,我想将一些JSON数据传递到我的控制器中,但也要传递一个字符串来标识类型。我想知道我是否可以创造这样的东西: [HttpPost] public void Write(string documentType, string jsonData) { ... [HttpPost] [Route("{docType}"] public void Write(string docType, string jsonData) {....} 我有一个类似的方法,但当我尝试从另一个应用程序执行此操

我想将一些JSON数据传递到我的控制器中,但也要传递一个字符串来标识类型。我想知道我是否可以创造这样的东西:

[HttpPost]
public void Write(string documentType, string jsonData)
{
    ...
[HttpPost]
[Route("{docType}"]
public void Write(string docType, string jsonData) {....}
我有一个类似的方法,但当我尝试从另一个应用程序执行此操作时:

// packageObject is an instance of my object I want JSON serialized
response = await client.PostAsJsonAsync("EdiDocument/Write?documentType=211", packageObject);
我得到:

状态代码:404,原因短语:“未找到”


这是我能做的吗?

这样想,你有一个端点地址(例如)和一个负载(在你的例子中,负载是json)。如果你想传递信息,它必须适合这些东西中的一个。。。您可以通过(1)在端点地址中使用附加参数,或者(2)在json负载中添加新值作为属性来完成所需的操作

对于选项1,您可以使用如下内容:

[HttpPost]
public void Write(string documentType, string jsonData)
{
    ...
[HttpPost]
[Route("{docType}"]
public void Write(string docType, string jsonData) {....}
这意味着您的结束点将更改为:

http://yourserver/yourapp/yourcontroller/docTypeGoesHere
选项2是只扩展json对象以包含其他信息。换句话说,向jsonData对象添加“documentType”属性


我猜您是在试图不修改json对象的结构,这给您留下了选项1。

您不能将packageObject与documentType一起包装到一个新对象中吗?web API的POST message body接受一个参数,您需要创建一个包含这两个参数的新类型。或者,让Web API自动委托给JSON解析器,当JSON可以在预期类型中为您反序列化时,为什么要尝试传递JSON?我正在尝试让一个端点处理多个传入类型。如果要使用querystring参数,则它不会在方法签名中,您必须直接从请求对象获取它。