c# - WebAPI 2 自定义路由

标签 c# asp.net asp.net-web-api routes

我已使用框架 4.7.1,通过在方法顶部添加属性,将客户路由添加到 WebAPI ASP.NET 应用程序:

public class ShapeFileAnalysisController : ApiController
{
    [HttpGet]
    [Route("GetDataValues")]
    [EnableCors(origins: "*", headers: "*", methods: "*")]
    public HttpResponseMessage GetDataValues()
    {
        string result = Models.ShapeFileReader.GetAdmin2();
        HttpResponseMessage response = this.Request.CreateResponse(HttpStatusCode.OK);
        response.Content = new StringContent(result, Encoding.UTF8, "application/json");
        return response;
    }  
}

但是当我添加 [Route("...")} 属性时,完整的 URL 会从 mysite.com/api/ShapeFileAnalysis 更改为 mysite.com/GetDataValues

webapiconfig.cs 是:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        config.EnableCors();

        // Web API routes
        config.MapHttpAttributeRoutes();

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

我应该怎么做才能保留 mysite.com/api/ShapeFileAnalysis/GetDataValues ?

最佳答案

属性路由使用放置在属性中的路由模板。

您的路线只有 GetDataValues,因此它将成为完整的路线路径。

mysite.com/GetDataValues

如果您放置了所需的路线路径

//GET api/ShapeFileAnalysis/GetDataValues
[HttpGet]
[Route("api/ShapeFileAnalysis/GetDataValues")]
[EnableCors(origins: "*", headers: "*", methods: "*")]
public HttpResponseMessage GetDataValues() {
    //...
} 

然后你就会得到想要的路径

mysite.com/api/ShapeFileAnalysis/GetDataValues

您可以使用[RoutePrefix]为整个 Controller 设置公共(public)前缀。属性

[RoutePrefix( "api/ShapeFileAnalysis" )] 
public class ShapeFileAnalysisController : ApiController {

    //GET api/ShapeFileAnalysis/GetDataValues
    [HttpGet]
    [Route("GetDataValues")]
    [EnableCors(origins: "*", headers: "*", methods: "*")]
    public HttpResponseMessage GetDataValues() {
        //...omitted for brevity
    }  
}

引用Attribute Routing in ASP.NET Web API 2

关于c# - WebAPI 2 自定义路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57581045/

相关文章:

visual-studio - 使用 Azure Active Directory 对 Web API 进行身份验证

c# - 如何将 Web API 添加到现有的 ASP.NET MVC (5) Web 应用程序项目?

c# - 仅更新不同的更改

c# - 最大化窗口的大小

javascript - 为什么我收到此消息 'Telerik is undefined'?

c# - 更新按钮触发编辑事件处理程序

c# - 测量代码执行时间

c# - 私有(private)方法和属性的 JetBrains Rider C# 命名风格

c# - 一种记录在 C# 中执行方法所花费时间的有效方法

asp.net - 如何在自定义 WebAPI HttpMessageHandler 中安全地设置用户主体?