我正在玩webapi2,遇到一个奇怪的问题。

我已更新默认的valeScontroller以使用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()我收到错误

{ “消息”:“发生错误。”, “ExceptionMessage”:“发现匹配请求的多种操作:\ r \ nsystem.web.http.ihttpactionResult get()在类型webapplication1.controllers.valuescontroller \ r \ nsystem.web.http.ihttpactionResult get2()上类型webapplication1 .controllers.valuescontroller“, “Exceptiontype”:“system.invalidoperationException”, “stacktrace”:“在system.web.http.controllers.apicontrollerInceSelector.asticeLectorCacheItem.Selectaction(HTTPControllerContext ControllerContext)\ r \ n在system.web.http.controlers.apicontrolleripnerelector.selectaction(httpControllerContext ControllerContext)\ r \ n在系统。 web.http.apicontroller.executeasync(httpcontrollercontext controllercontext,cancellationtoken cunclationToken)\ r \ n在system.web.http.dispatcher.httpcontrollerdispatcher.sendasynccore(httprokeestmessage请求,cancellationToken cancellationToken)\ r \ n在system.web.http.dispatcher。 httpcontrollerdispatcher.d__0.movenext()“ }

我是否需要手动创建一条路线,以便每个都可以工作?

一些如此简单,但导致我头疼!

有帮助吗?

解决方案

是因为你有两个get请求,没有参数,所以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