为什么我不能在我的MVC控制器上声明多个方法?

时间:2017-03-09 21:44:57

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

我正在尝试使用.Net Core MVC创建Web API。如果我只在控制器上声明一个方法,我可以使用来自另一个应用程序的HttpClient来调用API。但是,如果我向控制器添加第二个公共方法,HttpClient调用总是返回状态代码500,无论我调用哪种方法,我都找不到来自服务器的任何错误。我错过了什么,这将允许我从同一个控制器声明多个方法?

success: function(data){
    var response = jQuery.parseJSON(data);
    alert(response.value);
}

2 个答案:

答案 0 :(得分:1)

Route应为RoutePrefix

然后你可以

  • 对每个操作/方法使用Route,如下所示。使用开箱即用的路由配置,您甚至不需要上面定义的值,因为它被配置为默认转到api/[controller]
  • 或者,您可以将action指定为全局路由配置的一部分,并使用占位符。默认情况下,没有动作占位符,并且路由是基于Http Verb(获取,放置,删除,发布)完成的。

包含RoutePrefixRoute属性的代码

[RoutePrefix("api/Values")]
public class ValuesController : Controller
{            
    [Route("Method1")]
    public async Task<ResponseInfoList> Method1([FromBody]RequestInfoList value)
    {
        return new ResponseInfoList() {};
    }
    [Route("Method2")]
    public async Task<ResponseInfoList> Method2([FromBody]RequestInfoList value)
    {
        return new ResponseInfoList() { };
    }
}

答案 1 :(得分:0)

感谢您帮助@Igor。看起来他们在MVC 6中删除了RoutePrefix。这就是我最终的结果。

[Route("api/[controller]")]
public class ValuesController : Controller
{            
    [Route("Method1")]
    public async Task<ResponseInfoList> Method1([FromBody]RequestInfoList value)
    {
        return new ResponseInfoList() {};
    }
    [Route("Method2")]
    public async Task<ResponseInfoList> Method2([FromBody]RequestInfoList value)
    {
        return new ResponseInfoList() { };
    }
}