【问题标题】:Web api attribute routing, by content type, in dot net core 2?Web api属性路由,按内容类型,在dot net core 2中?
【发布时间】:2018-05-09 03:37:05
【问题描述】:

我希望能够使用同一 URL 上发布的 JSON 或表单数据。

就目前而言,我得到:

fail: Microsoft.AspNetCore.Mvc.Internal.ActionSelector[1]
      Request matched multiple actions resulting in ambiguity. Matching actions: 
:
fail: Microsoft.AspNetCore.Server.Kestrel[13]
      Connection id "0HLDLB0LJCPJ4", Request id "0HLDLB0LJCPJ4:00000001": An unhandled exception was thrown by the application.
Microsoft.AspNetCore.Mvc.Internal.AmbiguousActionException: Multiple actions matched. The following actions matched route data and had all constraints satisfied:

https://andrewlock.net/model-binding-json-posts-in-asp-net-core/ 建议使用不同的端点,但在这种情况下我不能这样做。

https://massivescale.com/web-api-routing-by-content-type/ 建议为 asp.net 提供一种方法,例如:

[ContentTypeRoute("api/test/bytype", "application/json")]

或

[ContentTypeRoute("api/test/bytype", "application/x-www-form-urlencoded")]

但在 .net 核心中,我们没有 System.Web.Http.Routing。也许可以移植到使用 Microsoft.AspNetCore.Mvc.Routing... 但是有什么东西可以代替 IHttpRouteConstraint

我的问题:.net core mvc 中是否已经内置了类似的东西?

例如在Java的JAX-RS中,有@Consumes("application/json")

【问题讨论】:

标签: asp.net-core-mvc asp.net-core-2.0


【解决方案1】:

我通过 Consumes 属性实现了这一点:

http://example.com/payment/callback - 接受 x-www-form-urlencoded。

[HttpPost]
[Route("callback")]
[Consumes("application/x-www-form-urlencoded")]
public ActionResult Post([FromForm] string value)
{

}

http://example.com/payment/callback - 相同的 url 但接受 application/json。

[HttpPost]
[Route("callback")]
[Consumes("application/json")]
public ActionResult Post([FromBody] JObject value)
{

}

【讨论】:

  • 我想知道为什么这个答案没有被接受。而且似乎由于一个错误,这不能与 CORS 一起使用。解决方法可以在这里找到:github.com/aspnet/Mvc/issues/7755#issuecomment-387681022
  • 好吧,我以为我在回答这个问题。在发布解决方案之前,我做了这个原型。显然,错过了 CORS 参考。也许对问题进行编辑以提供更清晰的信息?
  • 谁在寻找答案请注意:[Consumes("application/json")]是[FromBody]和[Consumes("application/x-www-form-urlencoded")]是[FromForm]
猜你喜欢
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 2019-08-06
  • 2018-08-25
  • 2014-05-28
  • 2014-04-19
  • 2019-03-11
相关资源
最近更新 更多