Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.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# 将api路由映射到mvc路由_C#_Asp.net_Asp.net Mvc_Api_Routes - Fatal编程技术网

C# 将api路由映射到mvc路由

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只

我希望可以从/files/{action}和/api/files/{action}访问我的FileController。我试过了

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我看到你编辑了你的问题,我修改了我的答案,它应该可以工作