【问题标题】:Access Routing using route name instead of routeTemplate in WebAPI2使用路由名称而不是 WebAPI2 中的 routeTemplate 访问路由
【发布时间】:2016-07-01 06:54:21
【问题描述】:

我是 Web API 的新手。我现在正在创建示例应用程序并尝试理解路由。

这是我的场景:

我有 AuthorController 和 2 个操作方法,例如:

public IHttpActionResult GetAuthor(int id){//logic}
public IHttpActionResult GetAuthorByName(string name){//logic}

这是默认路由:

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

现在我想使用不同的路径访问第二种方法 GetAuthorByName,例如:

 config.Routes.MapHttpRoute(
            name: "routename",
            routeTemplate: "api/RandomName/GetAuthorByName/{id}",
            defaults: new { controller = "Authors", action = "GetAuthorByName", id = RouteParameter.Optional }

        );

这样当我访问http://localhost:1234/api/RandomName/GetAuthorByName?Title=Kajal 时,它应该调用我传入参数的控制器和操作方法。

这在 Web API 中可行吗?或者如何使用路由名称访问我的操作方法?

请注意我使用 Firefox 的 Rest 客户端来调用方法。

【问题讨论】:

    标签: routing asp.net-web-api2 asp.net-web-api-routing


    【解决方案1】:

    是的,在 Web API 中是可能的。您可以为该控制器和操作方法指定路由。这可以通过attribute routing(在 Web API 2 中引入)或regular routing 来完成。

    由于您使用的是常规路由,因此需要在 routeTemplate 中指定参数“name”,如下所示。如果你在默认路由之前注册了这个路由,那么点击action方法的访问URL将会是。 http://localhost:1234/api/RandomName/GetAuthorByName/Kajal

    config.Routes.MapHttpRoute(
                name: "routename",
                routeTemplate: "api/RandomName/GetAuthorByName/{name}",
                defaults: new { controller = "Authors", action = "GetAuthorByName", name = RouteParameter.Optional }
    
            );
    

    【讨论】:

      猜你喜欢
      • 2015-05-04
      • 1970-01-01
      • 2014-09-11
      • 2017-09-29
      • 1970-01-01
      • 2016-05-01
      • 1970-01-01
      • 2018-03-01
      • 2015-03-06
      相关资源
      最近更新 更多