Несколько IHTTPACTIONRESULTS GET в течение одного апиконтроллера

StackOverflow https://stackoverflow.com//questions/21010449

Вопрос

Я играю с webapi2 и столкнулся с нечетной проблемой.

Я обновил ValuesconTroller по умолчанию для использования ihttpactionresult

как

    public class ValuesController : ApiController
{
    // GET api/values
    [HttpGet]
    public IHttpActionResult Get()
    {
        return Ok(new string[] { "value1", "value2" });
    }

    // GET api/values/get2
    [HttpGet]
    public IHttpActionResult Get2()
    {
        return Ok(new string[] { "value1", "value2" });
    }
.

Когда я пытаюсь позвонить Get () в Postman, я получаю ошибку

{ «Сообщение»: «Произошла ошибка»., «ExceptionReessage»: «Было обнаружено несколько действий, которые соответствует запросу: \ r \ nsystem.web.http.ihttpactionresult get () на webapplation in webapplation1.controllers.valuescontroller \ r \ nsystem.web.http.ihttpactionresult get2 () на webapplation1 .Controllers.valuescontroller ", «ExceptionType»: «System.invalidOperationException», «Stacktrace»: «При System.Web.http.controllers.apicontrollerActionelector.concelectorCaceiTem.selectaction (httpControllerContext PlanceReContext) \ R \ N на System.Web.http.controllers.apicontrollustractselector.SELECTACTACTION (HTPPCONTROLLERCONTEXT CONTROLERCONTEXT) \ R \ N в системе. Web.http.apicontroller.executeasync (httpcontrollerContextextelectextext, concellationtoken cancellationtoken) \ r \nна system.web.http.dispatcher.httpcontrollerdispatcher.sendasynccrecrocred (httprequether.sendasynccrecroctektekenceletsteake) \ r \nна system.web.http.dispatcher. Httpcontrollerdispatcher.d__0.movenext () " }

Мне нужно вручную создать маршрут для каждого, чтобы начать это работать?

что-то так просто, но заставляя меня головную боль!

Это было полезно?

Решение

Это потому, что у вас есть два запроса на получение, которые не имеют никаких параметров, поэтому webapi не имеет никакого способа дифференцировки между двумя.Один из способов было бы настроить разные маршруты для каждого метода, как вы говорите.Самый простой способ обойти это, если использовать Маршрутизация атрибута Библиотека, которая позволяет определить разные маршруты на контроллере иУровни действий действительно просто нравится это:

[RoutePrefix("api/values")]
public class ValuesController : ApiController
{   
    [GET("Get")]
    public IHttpActionResult Get()
    {
        return Ok(new string[] { "value1", "value2" });
    }

    [GET("Get2")]
    public IHttpActionResult Get2()
    {
        return Ok(new string[] { "value1", "value2" });
    }
}
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top