当前位置: 首页 > 编程笔记 >

asp.net-web-api 路由在ASP.NET WebAPI中的工作方式

王泓
2023-03-14
本文向大家介绍asp.net-web-api 路由在ASP.NET WebAPI中的工作方式,包括了asp.net-web-api 路由在ASP.NET WebAPI中的工作方式的使用技巧和注意事项,需要的朋友参考一下

示例

在ASP.NETWeb API中,控制器是处理HTTP请求的类。控制器的公共方法称为动作方法或简称为动作。

Web API框架收到请求后,会将请求路由到操作。为了确定要调用的操作,框架使用路由表。Web API的Visual Studio项目模板创建默认路由:

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

此路由在WebApiConfig.cs文件中定义,该文件位于App_Start目录中:

路由表中的每个条目都包含一个路由模板。Web API的默认路由模板是“ api / {controller} / {id} ”。在此模板中,“ api ”是文字路径段,而{ controller }和{ id }是占位符变量。

当Web API框架接收到HTTP请求时,它将尝试将URI与路由表中的路由模板之一进行匹配。如果没有路由匹配,则客户端会收到404错误。

例如,以下URI与默认路由匹配:

  • / api / values

  • / api / values / 1

但是,以下URI不匹配,因为它缺少“ api ”段:

  • /值/ 1

找到匹配的路由后,Web API将选择控制器和操作:

  • 为了找到控制器,Web API将“ Controller”html" target="_blank">添加到{controller}变量的值中。

  • 为了找到该动作,Web API首先查看HTTP方法,然后寻找其名称以该HTTP方法名称开头的动作。例如,对于GET请求,Web API查找以“ Get ...”开头的操作,例如“ GetEmployee”或“ GetAllEmployees”。此约定仅适用于GET,POST,PUT和DELETE方法。

您可以通过使用控制器上的属性来启用其他HTTP方法。我们稍后将看到一个示例。

  • 路由模板中的其他占位符变量(例如{id})映射到操作参数。

HTTP方法可以使用HttpGet,HttpPut,HttpPost或HttpDelete属性来修饰Action方法,而不是对HTTP方法使用命名约定,而可以为操作明确指定HTTP方法。

在下面的示例中,EmployeeGetEmployee方法映射到GET请求:

 public class EmployeesController : ApiController
    {
        [HttpGet]
        public EmployeeGetEmployee(id) {}
    }

要允许一个操作使用多个HTTP方法,或者允许GET,PUT,POST和DELETE之外的HTTP方法,请使用AcceptVerbs属性,该属性带有一个HTTP方法列表。

public class EmployeesController: ApiController
{
    [AcceptVerbs("GET", "HEAD")]
    public Employee GetEmployee (id) { }
}

按动作名称路由

使用默认的路由模板,Web API使用HTTP方法来选择操作。但是,您也可以创建一条路径,其中将动作名称包含在URI中:

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

在此路由模板中,{action}参数命名控制器上的action方法。通过这种路由方式,可以使用属性来指定允许的HTTP方法。例如,假设您的控制器具有以下方法:

public class EmployeesController: ApiController
{
    [HttpGet]
    public List<Employee> GetAllEmployees();
}

在这种情况下,对“ api / Employees / GetAllEmployees ”的GET请求将映射到GetAllEmployees方法。

您可以使用ActionName属性覆盖操作名称。在以下示例中,有两个映射到“ api / Employees / ShowAllEmployees / id的操作。一个支持GET,另一个支持POST:

public class EmployeesController : ApiController
{
    [HttpGet]
    [ActionName("ShowAllEmployees")]
    public List<Employee> GetAll(int id);

    [HttpPost]
    [ActionName("ShowAllEmployees")]
    public void GetAll (int id);

}

非行动

我们可以通过使用NonAction属性来防止将方法作为操作调用。这向框架发出信号,表明该方法不是动作,即使该方法与路由规则匹配也是如此。

 [NonAction]  
public string GetValues() { ... }
           

 类似资料:
  • 为什么Web API在Azure网站上停止工作,如果它在localhost上工作。 错误是无法加载资源:服务器响应的状态为404(未找到),或者您正在查找的资源已被删除、名称已更改或暂时不可用。在浏览器中将URL粘贴到api时。 在IIS 7.5承载的Web Api中找不到HTTP 404页 WebAPI DELETE request return 404在Azure中出错 WebApi和ASP.

  • 问题内容: 我有一个网络方法: 我想使用PageMethods来访问它:(提供了在ScriptManager中启用Enable PageMethods的条件): 我收到错误消息“ http动词后无法访问路径..” 我在Google上搜索并搜索了SO,但是没有基于ASP.NET Routing的任何解决方案。 我认为是由于asp.net路由服务方法不可访问。 另外我认为我也不能使用JSON,因为as

  • ASP.NET Web API 是个框架,能简单构建达到一定用户数量的 HTTP 服务,包括浏览器和移动端设备。ASP.NET Web API 是 .NET 框架最理想的构建 RESTful 应用的平台。

  • 我的骆驼路线

  • 我使用以下技术设计了一个微服务原型 尤里卡服务器(Discovery Server) Spring boot(后端服务) Spring Cloud API网关 上述服务正在启动,和在服务器中注册 当我向gate way发送请求时,它显示以下错误 如何解决上述问题。

  • 我正在使用Spring Cloud。我的Spring boot应用程序、、和中有四个服务。我尝试使用API Gateway调用和。当我从API Gateway调用My时,它可以正常工作,但不起作用。当我尝试获取时,我收到未找到错误。我是Spring Cloud的新人。这是我的代码。 下面是我的网址,最后一个网址是404 实体 学院控制员 应用程序. yml 学生管理员实体 应用程序. yml 应用