繁体   English   中英

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

[英]ASP.NET POST request to same host results in a null payload

我想从托管 API 的同一应用程序中访问一些 ASP.NET API。 真实世界的用例是我想将文件上传到 MVC 控制器,解析它并通过对托管在同一应用程序上的 API 的 POST 请求进行一堆单独的 API 调用。 我可以看到通过在 WebApi 控制器方法内部设置断点,适当的 API 端点被命中,但有效负载始终为空。 我尝试使用 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)
    {
        // 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 请求处理程序中静默失败。 有效载荷在没有这种不兼容性的情况下通过。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM