【问题标题】:Web API 1 and routingWeb API 1 和路由
【发布时间】:2014-08-20 17:43:56
【问题描述】:

我使用 web api 2 做了一个项目,但后来发现服务器正在运行 2003。所以我现在正在使用 web api 1 (.net 4) 重新创建项目。

我将路由放在 App_Start\WebApiConfig 中

 config.Routes.MapHttpRoute(
    name: "ContactApi",
    routeTemplate: "api/{controller}/{email}/{firstname}/{lastname}/{source}"
 );

我使用的网址是

http://localhost:64470/api/Contacts/GetId?email=user5@company.com&firstname=joe&lastname=user&source=wer

这在 web api 2 中运行良好,但出现以下错误 找不到资源

这里是控制器类的一些片段

 public class ContactsController : ApiController
 public string GetId(string email, string firstname, string lastname, string source)

知道我错过了什么吗?

【问题讨论】:

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


    【解决方案1】:

    您的路由模板要求参数 {email}、{firstName}、{lastName} 和 {source} 位于 URI 路径中。用下面的代码替换你的路线

    config.Routes.MapHttpRoute(
        name: "ContactApi",
        routeTemplate: "api/{controller}"
    );
    

    它应该到达您的 GetId 方法 - 不需要在路由中指定查询字符串参数。

    【讨论】:

    • 这不适合我。有没有工具可以告诉我 IIS 认为它应该去哪里?
    【解决方案2】:

    要使用您正在使用的 url 调用操作,您需要有一个路由:

    config.Routes.MapHttpRoute(
        name: "ActionApi",
        routeTemplate: "api/{controller}/{action}"
    );
    

    我个人不会这样做。我会使用默认路由:

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

    然后使用以下 url 调用 APi:

    http://localhost:64470/api/Contacts?email=user5@company.com&firstname=joe&lastname=user&source=wer
    

    【讨论】:

      猜你喜欢
      • 2016-12-06
      • 2017-08-27
      • 1970-01-01
      • 1970-01-01
      • 2020-09-09
      • 2015-11-14
      • 1970-01-01
      • 2017-02-28
      • 2021-10-01
      相关资源
      最近更新 更多