Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 找不到web api 2路由_C#_Asp.net Web Api2_Asp.net Web Api Routing_Route Constraint - Fatal编程技术网

C# 找不到web api 2路由

C# 找不到web api 2路由,c#,asp.net-web-api2,asp.net-web-api-routing,route-constraint,C#,Asp.net Web Api2,Asp.net Web Api Routing,Route Constraint,我的路线配置如下所示 public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller

我的路线配置如下所示

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}
[RoutePrefix("api/users/{userId:Guid}/locations")]
public partial class UsersController : MyCustomApiController
{    
    [Route("{locationId:Guid}/list")]
    [HttpPost]
    public async Task<IHttpActionResult> GetUsers(Guid userId, Guid locationId, [FromBody] Contracts.UserRequest request)
    { 
    }
}
public partial class UsersController : MyCustomApiController
{    
    [Route("{locationId:Guid}/insert")]
    [HttpPut]
    public async Task<IHttpActionResult> InsertUser(Guid userId, Guid locationId, [FromBody] Contracts.UserRequest request)
    { 
    }
}
我将我的用户控制器按操作划分为单独的文件,因此所有的
GET
操作都在
GetUserController.cs
文件中,
PUT
操作都在
PutUserController.cs
中,依此类推

GET
文件有这样一个分部类

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}
[RoutePrefix("api/users/{userId:Guid}/locations")]
public partial class UsersController : MyCustomApiController
{    
    [Route("{locationId:Guid}/list")]
    [HttpPost]
    public async Task<IHttpActionResult> GetUsers(Guid userId, Guid locationId, [FromBody] Contracts.UserRequest request)
    { 
    }
}
public partial class UsersController : MyCustomApiController
{    
    [Route("{locationId:Guid}/insert")]
    [HttpPut]
    public async Task<IHttpActionResult> InsertUser(Guid userId, Guid locationId, [FromBody] Contracts.UserRequest request)
    { 
    }
}
无论我做什么,我总是得到一个404错误。我正在使用
Content-Type
作为
application/json
我使用的URL是
http://localhost:52450/api/users/3F3E0740-1BCB-413A-93E9-4C9290CB2C22/locations/4F3E0740-1BCB-413A-93E9-4C9290CB2C22/list
带有
POST
,因为我无法使用
GET
为第一个方法发布复杂类型

http://localhost:52450/api/users/3F3E0740-1BCB-413A-93E9-4C9290CB2C22/位置/4F3E0740-1BCB-413A-93E9-4C9290CB2C22/插入
放置

如果需要,我还需要在路由配置中设置哪些路由

编辑

奇怪的是,另一个控制器也是一个部分类,似乎使用相同的配置

[RoutePrefix("api/products")]
public partial class ProductController : MyCustomApiController
{

    [Route("insert")]
    [HttpPut]
    public async Task<IHttpActionResult> InsertProduct([FromBody] InsertProductRequest request)
    {
    }
}

这是用于配置Web API路由的错误配置文件

//global.asax.cs
GlobalConfiguration.Configure(WebApiConfig.Register); // <-- WEB API
RouteConfig.RegisterRoutes(RouteTable.Routes); // <-- MVC
此外,
Guid
的路由约束也错误。它应该是
{parameterName:guid}

[RoutePrefix("api/users/{userId:guid}/locations")]
public partial class UsersController : MyCustomApiController { 
    [HttpPost]
    [Route("{locationId:guid}/list")]
    public async Task<IHttpActionResult> GetUsers(Guid userId, Guid locationId, [FromBody] Contracts.UserRequest request) { ... }
}
[RoutePrefix(“api/users/{userId:guid}/locations”)]
公共部分类UsersController:MyCustomApicController{
[HttpPost]
[路由(“{locationId:guid}/list”)]
公共异步任务GetUsers(Guid userId,Guid locationId,[FromBody]Contracts.UserRequest请求){…}
}

来源:

您可以在WebApiConfig中尝试这样做:

  config.MapHttpAttributeRoutes();
  var corsAttr = new EnableCorsAttribute("*", "*", "*");
  config.EnableCors(corsAttr);

谢谢你的回复。我没有其他部分文件的前缀。问题中错误地抄袭了这一点。我已经改正了。在第二个技巧中,WebApiConfig.cs中的config.MapHttpAttributeRoutes()调用
Routeconfig.cs中的
RegisterRoutes
方法,不,它不调用。仔细看。MVC和Web API有两种不同的注册方式,这很奇怪。我在同一个项目中有另一个控制器可以工作。它也是一个偏类。将用这些细节更新我的主要问题。此外,我在路由配置中设置了一个断点,并从WebApiConfig调用了routeconfig.cs中的registerroutes。cs@user20358,除非你改变了什么,否则我可以向你保证情况并非如此。显示你的启动。没有startup.cs,它只是我将添加到主要问题中的global.asax