【问题标题】:Why can I not declare multiple methods on my MVC Controller?为什么我不能在我的 MVC 控制器上声明多个方法?
【发布时间】:2017-03-09 21:44:57
【问题描述】:

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

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

        public async Task<ResponseInfoList> Method2([FromBody]RequestInfoList value)
        {
            return new ResponseInfoList() { };
        }
    }

【问题讨论】:

  • 这里要检查两件事:1.) 你的路由配置。 2.) 用户 F12 工具(网络活动)查看进出您的服务器的消息

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


【解决方案1】:

Route 应该是RoutePrefix

然后你可以

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

带有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() { };
    }
}

【讨论】:

  • RoutePrefix 是 Microsoft.AspNetCore.Mvc 的一部分吗?我没有看到那个,虽然它确实有路线。我只是遗漏了什么,还是 Core 的语法不同?谢谢。
  • @Eric - 你没有在你的问题中标记core,而是asp.net-mvc,所以这个答案是基于那个(mvc 5,webapi 2)。
  • @Eric - 我确实重读了您的问题,并看到您在顶部提到了它。我在问题中为您修复了标签,因此其他人很清楚。
【解决方案2】:

感谢@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() { };
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-06
    • 2022-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    • 2014-04-28
    相关资源
    最近更新 更多