繁体   English   中英

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

[英]WebApi Routing causes 404 (Not Found) response

因此,这很简单。 我过去曾经做过。 但是,似乎我缺少了一些东西。

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”:“未找到与请求URI'http:// localhost:54699 / api / some '匹配的HTTP资源。”,“ MessageDetail”:“未找到与名为'some'的控制器匹配的类型。 “ }

资料夹结构:

在此处输入图片说明

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

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

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

您的路由配置文件中包含/ api。

您已经提到/ api作为控制器的路由前缀,然后操作就“有些”了。

uri到“一些”应该是

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM