Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用属性路由时,如何不生成默认端点?_C#_Asp.net_.net_Asp.net Web Api_Asp.net Web Api2 - Fatal编程技术网

C# 使用属性路由时,如何不生成默认端点?

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

我在一个Web API控制器中使用属性路由(.NET Framework 4.5.2-不要问,我正试图获得时间的批准,以便将一切向前推进)

我已将[RoutePrefix]属性应用于ApicController

我有两个控制器动作,都是httpget。每个都应用了[Route]属性

我正在使用Swagger自动生成文档。在该控制器的文档中,我看到列出了三个端点——两个用于我的控制器操作,另一个用于裸控制器路由的HttpGet

这就是我所拥有的:

[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,您是否可以将其包含在问题中?您是否仍在路由配置中定义了默认路由,以及启用属性路由的调用?