【问题标题】:How to change default route in asp.net web api如何更改asp.net web api中的默认路由
【发布时间】:2012-06-25 16:44:49
【问题描述】:

我正在研究 asp.net web api。我正在尝试在 global.asax 文件中为我的项目设置默认路由,例如,

localhost:45678/api/Products

但是我没有找到类似asp.net mvc路由模型之类的格式

url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

它总是将我重定向到主页(HomeController)。请指导我。

【问题讨论】:

  • “它总是将我重定向到主页”是什么意思。您的意思是当您导航到 localhost:45678/api/Products 时,它会重定向您,或者当您从 Visual Studio 运行项目时,您登陆的第一页是您的主页?
  • 当我运行我的项目时,它会将我重定向到主页。
  • 我已根据您的评论更新了我的答案。
  • 如何在 IIS 中做同样的事情?

标签: asp.net asp.net-mvc asp.net-web-api


【解决方案1】:

App_Start 文件夹中检查您的RouteConfig 课程。您应该会看到可以更改的默认路由。

        routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

编辑

阅读您的 cmets 后,我认为问题不在于您的路线。我不确定您为什么想要 这样做,但您只需要为您的项目指定起始 URL。右键单击您的 Web 项目 - 单击 Properties - 单击 Web 选项卡 - 在 Start Action 下选择 Start URL 并在框中输入 http://localhost:45678/api/Products。保存您的项目并再次运行。它应该从新位置开始。

【讨论】:

  • 我已尝试在 global.asax routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { controller = "Products", id = RouteParameter.Optional } ); 中使用此代码,但它仍会重定向到主页。我在 App_Start 中没有找到 RouteConfig 类
  • 您是否有一个从 ApiController 继承的名为“ProductsController”的控制器,并且您在此控制器上有一个“public IEnumerable Get()”方法吗?
  • 是的先生,我在 productscontroller:ApiController 中有public IEnumerable<Product> GetAll() { return products; }
  • 对不起,我不知所措。不过为了澄清一下,默认情况下,您的 GetAll() 方法将返回 Product 对象的 JSON 数组,而不是网页。直接从浏览器导航到 localhost:45678/api/Products 可能会做一些意想不到的事情。如果您使用 Fiddler 向该地址发送 GET 请求,您应该会在响应正文中看到一个 JSON 数组(当然,如果它按预期工作!)。
  • 我使用了localhost:56789/api/products 我得到了 JSON 数组格式的所有产品表/类记录作为响应。
【解决方案2】:

这个问题可能是几乎很多人都会犯的常见错误。

这里的事实是,无论您使用什么框架,所有路由都被收集在System.Web.Routing.RouteTable.Routes 集合下。因此,如果您将 ASP.NET MVC 默认路由放在 ASP.NET Web API 路由之前,则永远不会扫描 ASP.NET Web API 路由,因为 MVC 路由将匹配。

通过查看您迄今为止提供的内容,我假设这里就是这种情况。如果不是这种情况,请将完整的解决方案上传到某个地方,人们可以全面了解。

【讨论】:

  • 我可以知道该怎么做吗?
【解决方案3】:

实际上,如果我们可以在 properties->web->start location 中设置默认路由。那么在 global.asax 文件中需要什么路由表、自定义路由、RegisterRoutes。我试过这种方式

一开始好像是,

routes.MapHttpRoute(
    name: "Default Api",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

现在我想将localhost:xxxx/api/products 作为我的 web api 的默认路由,

routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/Products/{id}",
    defaults: new { controller = "Products", id = RouteParameter.Optional }
);

但是没有用的结果。

【讨论】:

  • 您能否改进您的问题而不是发布更新作为答案? (SE 不能用作论坛)谢谢
  • Leandro 是对的,这应该被编辑到原始问题中。建议删除。
【解决方案4】:

在 Visiual Studio 中开发时,您可以通过展开项目的 Properties 文件夹进行设置。然后打开 launchSettings.json 文件并在该文件中查找 "launchUrl" 属性

您可以更改正在处理的配置文件的默认启动路线。

"launchUrl" : "api/products"

【讨论】:

    【解决方案5】:

    [编辑:我的答案和凯文的一样]

    你是说当你从 Visual Studio 运行项目时,它会打开一个浏览器到项目主页?

    Web API 项目模板包含一个 MVC 控制器和一个 Web API 控制器。

    URI“http://localhost:xxxx/”进入 MVC 控制器,而“http://localhost:xxx/api/products”进入 API 控制器。

    当您在 Visual Studio 中运行项目时,默认情况下它将导航到“http://localhost:xxxx”。在正常操作中,客户端会请求它想要的任何 URI。

    您可以在 Project Properties / Web / Start Action 下更改 Visual Studio 设置。

    【讨论】:

      【解决方案6】:

      我认为您已经围绕解决方案跳舞,但只是错过了目标。试试这个:

      1. 确保您正在调用 GlobalConfiguration.Configure(WebApiConfig.Register);在您的 Global.asax.cs 中。

      2. WebApiConfig.Register()中设置默认路由为:

        routes.MapHttpRoute(name: "DefaultApi", routeTemplate: "api/{Controller}/{id}", 默认值: new { controller = "Products", id = RouteParameter.Optional });

      3. 在您的网络项目设置中,确保您将“开始网址”属性设置为:

        本地主机:45678

      祝你好运。

      【讨论】:

        【解决方案7】:

        在我的 ASP .NET Core Web API 项目中,每当您调试项目时,它都会将浏览器启动到预定义的 URL。这可以通过右键单击项目并转到属性然后调试选项卡来配置,如下所示。

        也就是说,不确定这与上面之前的答案中描述的 launchsettings.json 有什么区别。

        【讨论】:

          【解决方案8】:

          你需要添加:

          Response.Redirect("Products.aspx");
          

          HomeController类中的方法index()

          【讨论】:

            猜你喜欢
            • 2020-03-23
            • 1970-01-01
            • 1970-01-01
            • 2013-01-04
            • 1970-01-01
            • 2020-05-31
            • 1970-01-01
            • 1970-01-01
            • 2018-11-14
            相关资源
            最近更新 更多