Маршрутизация атрибутов веб-API, по типу контента, в dot net core 2? - PullRequest
0 голосов
/ 09 мая 2018

Я хотел бы иметь возможность использовать опубликованные данные в формате JSON или формы по одному и тому же URL.

Пока все стоит, я получаю:

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")

1 Ответ

0 голосов
/ 07 августа 2018

Я выполнил это с помощью атрибута 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)
    {

    }
...