我已使用框架 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
}
}
关于c# - WebAPI 2 自定义路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57581045/