繁体   English   中英

ASP.NET Web API无法从POST正文读取

[英]ASP.NET Web API unable to read from POST body

我遇到一个问题,即我无法使POST内容在Web API中正常工作。

遵循这些教程,我应该能够在控制器中具有如下所示的路由(表格1):

[Route("my-post-method")]
public HttpResponseMessage MyPostMethod(MyModel model)
{
  Request.CreateResponse(HttpStatus.OK, model.SomeNumber * 5);
}

但这是行不通的。 相反,我必须执行以下操作(表格2):

[Route("my-post-method")]
public HttpResponseMessage MyPostMethod()
{
  var text = new StreamReader(HttpContext.Current.Request.InputStream).ReadToEnd();
  var model = JsonConvert.DeserializeObject<MyModel>(text);
  Request.CreateResponse(HttpStatusCode.OK, model.SomeNumber * 5);
}

现在,我认为这与项目上的CORS设置有关,但我不确定。 如果我尝试通过邮递员提出将表格1的要求,那么一切都会按预期进行。 如果我尝试通过浏览器向表单1发出请求,但未设置Content-Type标头,则POST请求会收到不受支持的媒体类型错误(这是我期望发生的情况),但是如果我设置了Content-Type标头为“ application / json”,然后Web API对OPTIONS预检请求返回404响应。 另外,向方法参数添加[FromBody]属性不会执行任何操作。

Web.config包含:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS" />
      </customHeaders>
    </httpProtocol>
</system.webServer>

并且启动配置类具有:

public static void Register(HttpConfiguration config)
{
  config.EnableCors();
  config.MapHttpAttributeRoutes();

  var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
  jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
  jsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
  jsonFormatter.SerializerSettings.Formatting = Formatting.Indented;
  jsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter());

  config.EnsureInitialized();
}

看来您需要使用[EnableCors]属性装饰方法,如此处记录

https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api

来自邮递员的请求不需要像客户端浏览器请求那样的CORS。

暂无
暂无

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

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