Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.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
C# ASP.NET对同一主机的POST请求将导致空负载_C#_Asp.net_Asp.net Mvc_Asp.net Web Api - Fatal编程技术网

C# ASP.NET对同一主机的POST请求将导致空负载

C# ASP.NET对同一主机的POST请求将导致空负载,c#,asp.net,asp.net-mvc,asp.net-web-api,C#,Asp.net,Asp.net Mvc,Asp.net Web Api,我想从承载这些API的同一应用程序中找到一些ASP.NET API。现实世界中的用例是,我想将一个文件上传到MVC控制器,解析它,并通过对同一应用程序上托管的API的POST请求进行一系列单独的API调用。我可以看到,通过在WebApi控制器方法内设置断点,相应的API端点被命中,但有效负载始终为null。我尝试过使用Flurl、RestSharp、WebClient和WebRequest发出请求,但它们都不允许负载通过。如果我试图通过单元/集成测试调用这些POST请求,它也会因空负载问题而失败

我想从承载这些API的同一应用程序中找到一些ASP.NET API。现实世界中的用例是,我想将一个文件上传到MVC控制器,解析它,并通过对同一应用程序上托管的API的POST请求进行一系列单独的API调用。我可以看到,通过在WebApi控制器方法内设置断点,相应的API端点被命中,但有效负载始终为null。我尝试过使用Flurl、RestSharp、WebClient和WebRequest发出请求,但它们都不允许负载通过。如果我试图通过单元/集成测试调用这些POST请求,它也会因空负载问题而失败

ASP.NET框架是否存在某种内置限制,防止将负载发布到同一应用程序

var myObjectRow = new JObject();
myObjectRow["Key"] = 1;


/* RestSharp */
var request = new RestRequest("/api/MyObject", Method.POST);
request.AddHeader("Content-type", "application/json; charset=utf-8");
request.AddBody(request.JsonSerializer.Serialize(myObjectRow));
request.AddJsonBody(myObjectRow);
request.AddParameter("Application/Json", myObjectRow, ParameterType.RequestBody);
var response = RestClient.Execute<MyObject>(request);


/* WebClient */
using (var webClient = new WebClient())
{
    webClient.Headers[HttpRequestHeader.ContentType] = "application/json";
    var payload = JsonConvert.SerializeObject(myObjectRow);
    var response = webClient.UploadString(BaseUrl + "/api/MyObject", "POST", payload);
}


/* WebRequest */
var payload = JsonConvert.SerializeObject(myObjectRow);
byte[] buf = Encoding.UTF8.GetBytes(payload);
var request = (HttpWebRequest)WebRequest.Create(BaseUrl + "/api/MyObject");
request.Method = "POST";
request.ContentLength = buf.Length;
request.ContentType = "application/json; charset=utf-8";
request.GetRequestStream().Write(buf, 0, buf.Length);

using (var response = (HttpWebResponse)request.GetResponse())
{
    var responseStream = response.GetResponseStream();
    var streamReader = new StreamReader(responseStream, Encoding.UTF8);
    var responseString = streamReader.ReadToEnd();
}
试试这个:

 public class MyObjectController : ApiController
{
    public MyObject Post(MyObject myObject)
    {
         ModelState.Clear();
        // myObject shows up null here
        return myObject;
    }
}
试试这个:

 public class MyObjectController : ApiController
{
    public MyObject Post(MyObject myObject)
    {
         ModelState.Clear();
        // myObject shows up null here
        return myObject;
    }
}

我解决了这个问题。我正在使用的Excel阅读器正在向整数字段添加“.0”,这导致反序列化在POST请求处理程序中以静默方式失败。有效负载在没有不兼容的情况下通过。

我解决了问题。我正在使用的Excel阅读器正在向整数字段添加“.0”,这导致反序列化在POST请求处理程序中以静默方式失败。有效负载可以在没有不兼容的情况下通过。

尝试将myObjectRow重命名为myObject。我相信它希望参数是相同的名称。

尝试将myObjectRow重命名为myObject。我相信它期望参数是相同的名称。

如果更改api以接收字符串而不是JSON,会发生什么情况?可能是两个问题之一。(1) HTTP请求中不包括表单正文,或者(2)表单正文包含内容,但从表单正文到
MyObject
的绑定/映射失败,可能是由于解析问题。检查日志,让我们知道发生了哪些情况,因为答案会非常不同。如果将api更改为接收字符串而不是JSON,会发生什么情况?可能是两个问题之一。(1) HTTP请求中不包括表单正文,或者(2)表单正文包含内容,但从表单正文到
MyObject
的绑定/映射失败,可能是由于解析问题。检查日志,让我们知道发生了哪些情况,因为答案会非常不同。解决方案是??你在这里的帖子没有提供问题的有效答案,你可以将其添加到评论或编辑并更新你的问题。我不记得解决方案是什么。可能是将一列数字格式化为文本。解决方案是??你在这里的帖子没有提供问题的有效答案,你可以将其添加到评论或编辑并更新你的问题。我不记得解决方案是什么。可能是将数字列格式化为文本。