首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将api路由映射到mvc路由

将api路由映射到mvc路由
EN

Stack Overflow用户
提问于 2018-10-24 17:53:22
回答 1查看 112关注 0票数 1

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

代码语言:javascript
复制
routes.MapRoute(
    name: "Files",
    url: "api/Files/{action}/{id}",
    defaults: new { controller = "Files", id = UrlParameter.Optional }
);

但它不起作用。我删除了WebApiConfig,所以在App_Start中只有MVC RouteConfig,但没有帮助。

Upd

控制器码

代码语言:javascript
复制
public class FilesController : Controller {
    public ActionResult Index() {
        return new HttpStatusCodeResult(System.Net.HttpStatusCode.OK);
    }
}

请求urls:

文件/索引-> OK (200)

/api/files/index ->未找到(404)

Upd #2

完全RouteConfig.cs

代码语言:javascript
复制
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 }
        );
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-24 18:00:06

我认为您可以尝试在原来的路径设置前面添加一条新的路径。

此设置将首先检查URL是否匹配Files/{action}/{id},如果不是使用api/Files/{action}/{id}

代码语言:javascript
复制
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控制器和files操作。

代码语言:javascript
复制
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 }
        );

    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52975225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档