Web 服务的 C# Web API 路由
本文关键字:Web 路由 API 服务 | 更新日期: 2023-09-27 18:31:54
我正在用 c# 编写一个 web api,我有一个关于访问名为 test
的函数的正确路由的问题。
下面是类定义:
[RoutePrefix("api")]
public class ItemsWebApiController : ApiController
我有一个RoutePrefix
如下:
[Route("test")]
这是名为test
的函数:
[Route("test")]
[System.Web.Http.AcceptVerbs("GET")]
[System.Web.Http.HttpGet]
public String test()
{
return "test";
}
我正在尝试访问以下网址:http://localhost/api/test
上述 url 显示以下异常:
"/"应用程序中的服务器错误。
找不到资源。
说明:HTTP 404。您要查找的资源(或其之一) 依赖项)可能已被删除,其名称已更改,或者 暂时不可用。 请查看以下网址并制作 确保拼写正确。
请求的网址:/api/test
如何访问 test
函数,以便在浏览器中显示字符串"test"
?
编辑
我已部署到本地 IIS,并且数据库连接字符串工作正常。
本地 IIS 的地址是 http://localhost/
这些是我尝试过的网址:
http://localhost/test
http://localhost/api/test
http://localhost/api/test/test
http://localhost/ItemsWebApiController/test
http://localhost/ItemsWebApi/test
以上所有内容都返回错误页面。
谢谢
如果你是一个推杆[Route("test")]
你的网址将被http://address/test
如果您需要像 http://address/api/test
这样的网址,请像 [Route("api/test")]
一样更改您的路线
注意:您还需要添加[HttpGet]
在 WebAPI 控制器中激活属性路由
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
并在您的应用程序中开始
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
}
然后你的 URL http://localhost/test
,因为默认路由在这里不匹配。
根据您的配置,路由将为: http://address/api/test/test第一个test
是属性 [Route("test")]
中的路由前缀;SCOND test
是控制器中在方法上定义的属性中的操作
[Route("test")]
public String test()
{
Web API 会根据操作名称推断 http 方法。它不会从"测试"中知道要使用什么。
查看文档
HTTP方法
Web API 还根据请求的 HTTP 方法(GET、POST 等)选择操作。默认情况下,Web API 会查找与控制器方法名称开头不区分大小写的匹配项。例如,名为 PutCustomers 的控制器方法与 HTTP PUT 请求匹配。
您可以通过使用以下任何属性修饰 mathod 来覆盖此约定:
- [删除]
- [HttpGet]
- [HttpHead]
- [HttpOptions]
- [HttpPatch]
- [维基邮报]
- [HttpPut]
下面的示例将 CreateBook 方法映射到 HTTP POST 请求。
[Route("api/books")]
[HttpPost]
public HttpResponseMessage CreateBook(Book book) { ... }