C# 将api路由映射到mvc路由
我希望可以从/files/{action}和/api/files/{action}访问我的FileController。我试过了C# 将api路由映射到mvc路由,c#,asp.net,asp.net-mvc,api,routes,C#,Asp.net,Asp.net Mvc,Api,Routes,我希望可以从/files/{action}和/api/files/{action}访问我的FileController。我试过了 routes.MapRoute( name: "Files", url: "api/Files/{action}/{id}", defaults: new { controller = "Files", id = UrlParameter.Optional } ); 但它不起作用。我删除了WebApiConfig,所以应用程序中的Start只
routes.MapRoute(
name: "Files",
url: "api/Files/{action}/{id}",
defaults: new { controller = "Files", id = UrlParameter.Optional }
);
但它不起作用。我删除了WebApiConfig,所以应用程序中的Start只是MVC RouteConfig,但它没有帮助
Upd控制器代码
public class FilesController : Controller {
public ActionResult Index() {
return new HttpStatusCodeResult(System.Net.HttpStatusCode.OK);
}
}
请求URL:/文件/索引->确定(200)
/api/文件/索引->未找到(404) Upd#2
完成RouteConfig.cs
public class RouteConfig {
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 }
);
routes.MapRoute(
name: "FilesRoute",
url: "Files/{action}/{id}",
defaults: new { controller = "Files", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Files",
url: "api/Files/{action}/{id}",
defaults: new { controller = "Files", id = UrlParameter.Optional }
);
}
}
我认为您可以尝试在原始路线设置之前添加新路线 此设置将首先检查URL是否匹配
Files/{action}/{id}
,如果不匹配,则使用api/Files/{action}/{id}
routes.MapRoute(
name: "FilesRoute",
url: "Files/{action}/{id}",
defaults: new { controller = "Files", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Files",
url: "api/Files/{action}/{id}",
defaults: new { controller = "Files", id = UrlParameter.Optional }
);
编辑
问题在于路线设置顺序,您需要将默认路线设置为最后一条
/api/files/index
=>否则,设置将找到api
控制器和文件
操作
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "FilesRoute",
url: "Home/{action}/{id}",
defaults: new { controller = "Home", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Files",
url: "api/Home/{action}/{id}",
defaults: new { controller = "Home", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
你的请求URL是什么?你能发布你的控制器和操作代码吗?你确定你在配置类中添加了
RouteCollection
的设置吗?因为如果我创建一个示例项目,它就可以工作。@rsdk我看到你编辑了你的问题,我修改了我的答案,它应该可以工作