WebApi路由导致404(未找到)响应

时间:2017-03-20 17:27:55

标签: c# asp.net asp.net-web-api

所以,这很简单。我过去做过这个。但是,似乎我错过了一些东西。

WebApiConfig.cs

public static void Register(HttpConfiguration config)
{
    // Attribute routing.
    config.MapHttpAttributeRoutes();
    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
}

Global.asax.cs

protected void Application_Start(object sender, EventArgs e)
{
    GlobalConfiguration.Configure(WebApiConfig.Register);
    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

SomeController.cs

[RoutePrefix("api")]
public class SomeController: ApiController
{
    [Route("some")]
    [HttpGet]
    private HttpResponseMessage GetSome(HttpRequestMessage request)
    {
        ...
    }
}

现在,当我致电:http://localhost:54699/api/some时,我收到以下404

  

{“Message”:“找不到与请求匹配的HTTP资源   URI'http://localhost:54699/api/some'。“,”MessageDetail“:”不   找到的类型匹配名为'some'的控制器。“}

文件夹结构:

enter image description here

4 个答案:

答案 0 :(得分:4)

为什么你的控制器方法是私有的,这应该是公开的

[RoutePrefix("api")]
public class SomeController: ApiController
{
    [Route("some")]
    [HttpGet]
    public HttpResponseMessage GetSome(HttpRequestMessage request)
    {
    ...
    }
}

答案 1 :(得分:0)

尝试在MVC' GlobalConfiguration.Configure(WebApiConfig.Register);之后移动FilterConfig。这是WebAPI属性路由的标准警告。

答案 2 :(得分:0)

你的路由配置文件中有/ api。

你已经提到/ api作为控制器的路由前缀,然后动作是“some”。

uri到“some”应该是

http://localhost:<port>/api/api/some

答案 3 :(得分:0)

[RoutePrefix("api/some")]
public class SomeController: ApiController
{
    [HttpGet]
    public HttpResponseMessage GetSome(HttpRequestMessage request)
    {
    ...
    }
}

你的方法GetSome是私有的。另外,我将修改RoutePrefix属性,如代码片段中所示,以避免在每个方法上重写Route属性。