C# 使用属性路由时,如何不生成默认端点?
我在一个Web API控制器中使用属性路由(.NET Framework 4.5.2-不要问,我正试图获得时间的批准,以便将一切向前推进) 我已将[RoutePrefix]属性应用于ApicController 我有两个控制器动作,都是httpget。每个都应用了[Route]属性 我正在使用Swagger自动生成文档。在该控制器的文档中,我看到列出了三个端点——两个用于我的控制器操作,另一个用于裸控制器路由的HttpGet 这就是我所拥有的:C# 使用属性路由时,如何不生成默认端点?,c#,asp.net,.net,asp.net-web-api,asp.net-web-api2,C#,Asp.net,.net,Asp.net Web Api,Asp.net Web Api2,我在一个Web API控制器中使用属性路由(.NET Framework 4.5.2-不要问,我正试图获得时间的批准,以便将一切向前推进) 我已将[RoutePrefix]属性应用于ApicController 我有两个控制器动作,都是httpget。每个都应用了[Route]属性 我正在使用Swagger自动生成文档。在该控制器的文档中,我看到列出了三个端点——两个用于我的控制器操作,另一个用于裸控制器路由的HttpGet 这就是我所拥有的: [RoutePrefix("api/test/Ti
[RoutePrefix("api/test/Tickets")]
public class TestTicketsController : ApiController
{
[HttpGet, Route("")]
public HttpResponseMessage GetTickets()
{
....
}
[HttpGet, Route("since")]
public HttpResponseMessage GetTicketsSince(string since)
{
....
}
}
在生成的Swagger文档中,我看到了三个端点:
- 获取api/测试/票据
- 获取api/测试/票据/自
- 获取api/TestTickets
api/TestTickets
,似乎是从控制器的类名派生的,忽略了我的路由属性。当我调用它时,我得到一个HTTP 200,它的主体是空的,尽管没有为它定义操作
这是从哪里来的?我如何才能阻止它的生成
===
有人建议我删除[HttpGet,Route(“”)]
属性。如果我这样做,我会得到一个错误:
Multiple operations with path 'api/TestTickets' and method 'GET'.
还有人建议我将我的WebApiConfig包括在内:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "swagger_root",
routeTemplate: "",
defaults: null,
constraints: null,
handler: new RedirectHandler((message => message.RequestUri.ToString()), "api/docs/index"));
var mediaType = new MediaTypeHeaderValue("application/json");
var formatter = new JsonMediaTypeFormatter();
formatter.SupportedMediaTypes.Clear();
formatter.SupportedMediaTypes.Add(mediaType);
config.Formatters.Clear();
config.Formatters.Add(formatter);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
如果我注释掉config.Routes.MapHttpRoute
,额外的端点就会消失
现在只需确定是否有任何控制器期望此默认端点存在
谢谢。在评论中指出,而不是在回答中指出-默认路由在WebApiConfig中配置
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
如果您从
GetTickets
中删除Route
属性,您在swagger中是否仍会得到相同的结果?嗨,Jeff,作为.net framework api,这将是在App_Start文件夹中使用WebApiConfig文件的scaffold,您是否可以将其包含在问题中?您是否仍在路由配置中定义了默认路由,以及启用属性路由的调用?