c# - Web API 方法永远不会被路由到

标签 c# asp.net-web-api

我之前玩过 Web api,而且我似乎总是遇到同样的问题,我的方法没有被路由到。

我的应用程序具有该应用程序见解包,因此我可以看到它捕获了我发出的请求 - 通过查看方法签名上方的请求行,但它们从未实际执行,并且 App Insights 报告失败的请求。

这是我的 WebApiConfig

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
;

这是我的简单 Controller 和方法

public class ExampleController : ApiController
{
    [HttpGet]
    [ActionName("Test")]
    public IHttpActionResult Test()
    {
        return Ok();
    }
}

这是 MVC 应用程序的一部分,因此当我启动该项目时,主页/索引 View 将显示在我的浏览器中。然后,我转到 postman 并创建一个指向

的新获取请求
http://localhost:port/api/Example/Test

但这会导致 404。

我一定做错了什么,因为我总是遇到这种情况

最佳答案

WebAPI 的默认映射不包括作为路由一部分的操作,因为默认情况下,它期望 Controller 是资源的主要标识符,并使用 GET/POST/PUT/DELETE 动词来定义哪个操作已运行。

因此,即使您手动指定“Test”的 ActionName,默认处理程序中也没有任何内容可对其进行模式匹配。

您可以调整默认映射以包含操作,如下所示:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
;

但是,您可能会发现您更喜欢属性路由(我知道我喜欢),您可以将其应用到您的 Controller ,如下所示:

[RoutePrefix("api/Example")]
public class ExampleController : ApiController
{
    [HttpGet]
    [Route("Test")]
    public IHttpActionResult Test()
    {
        return Ok();
    }
}

要启用属性路由,您需要将以下内容添加到启动配置中:

config.MapHttpAttributeRoutes();

关于c# - Web API 方法永远不会被路由到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50402605/

相关文章:

c# - 如何使用c#与开关EKI-1526和电表进行通信

c# - JsonConvert.DeserializeObject 上的 StackOverflowException

javascript - 来自后端的字节数组在前端转换为其他内容

c# - 如何使用 linq to object 从过滤 2 个列表创建列表

c# ".datasource"未显示在框中

c# - 为什么 async void 中的异常会导致应用程序崩溃,但 async Task 中的异常会被吞噬

c# - 或,与运算符

asp.net - web-api 和 swagger 文档

c# - WebAPI 防止竞争条件

xml - 如何从 Web API 方法返回 Xml 数据?