web api 中的自定义路由只是重定向到当前页面
Custom route in web api just redirects to current page
作为 MVC web 的菜鸟 api 可能有一些非常明显的东西我错过了..
然而,在我的 ProjectController
中,我有以下带有属性的方法(我知道这种方法应该是 POST 但只是简单地测试...):
[Route("api/projects/archive/{id:int}")]
[HttpGet]
public void Archive(int id)
{
_projectService.Archive(id);
}
但是,当我打开 URL 例如:
http://localhost:49923/api/projects/archive/1
页面只是重定向到当前URL,并没有调用归档方法。我还在该方法上设置了一个断点来验证它没有命中。
我最好的猜测是我还必须更新我的 web api 默认路由配置,但我只是假设路由属性就足够了?
这是我的网站 api 路由配置:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new {id = RouteParameter.Optional});
config.Formatters.JsonFormatter.SupportedMediaTypes
.Add(new MediaTypeHeaderValue("text/html"));
}
我在这里做错了什么? :-)
编辑:
澄清 1 - 我的项目控制器:
public class ProjectsController : ApiController
{
private ProjectService _projectService;
public ProjectsController()
{
_projectService = new ProjectService();
}
[Route("api/projects/archive/{id:int}")]
[HttpGet]
public void Archive(int id)
{
_projectService.Archive(id);
}
}
澄清 2 - 重定向:
假设我站在主页上 (/)。然后我转到 URL“http://localhost:49923/api/projects/archive/1
”,它只会重新加载页面并将我留在主页上。
Web API 配置已正确配置。
确保正确构建控制器和操作
public class ProjectController : ApiController {
//...other code removed for brevity
[HttpGet]
[Route("api/projects/archive/{id:int}")]//Matches GET api/projects/archive/1
public IHttpActionResult Archive(int id) {
_projectService.Archive(id);
return Ok();
}
}
回答有点晚了,但希望你觉得它有用,
很多时候我们编写代码的方式帮助我们找到了问题的解决方案,
正如 Nkosi 已经回答的那样,正确构建控制器和操作方法将解决问题。
首先检查方法而不是查看 route.config 总是有帮助的,因为默认情况下它将是相同的,除非您提供自定义属性。
作为 MVC web 的菜鸟 api 可能有一些非常明显的东西我错过了..
然而,在我的 ProjectController
中,我有以下带有属性的方法(我知道这种方法应该是 POST 但只是简单地测试...):
[Route("api/projects/archive/{id:int}")]
[HttpGet]
public void Archive(int id)
{
_projectService.Archive(id);
}
但是,当我打开 URL 例如:
http://localhost:49923/api/projects/archive/1
页面只是重定向到当前URL,并没有调用归档方法。我还在该方法上设置了一个断点来验证它没有命中。
我最好的猜测是我还必须更新我的 web api 默认路由配置,但我只是假设路由属性就足够了?
这是我的网站 api 路由配置:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new {id = RouteParameter.Optional});
config.Formatters.JsonFormatter.SupportedMediaTypes
.Add(new MediaTypeHeaderValue("text/html"));
}
我在这里做错了什么? :-)
编辑:
澄清 1 - 我的项目控制器:
public class ProjectsController : ApiController
{
private ProjectService _projectService;
public ProjectsController()
{
_projectService = new ProjectService();
}
[Route("api/projects/archive/{id:int}")]
[HttpGet]
public void Archive(int id)
{
_projectService.Archive(id);
}
}
澄清 2 - 重定向:
假设我站在主页上 (/)。然后我转到 URL“http://localhost:49923/api/projects/archive/1
”,它只会重新加载页面并将我留在主页上。
Web API 配置已正确配置。 确保正确构建控制器和操作
public class ProjectController : ApiController {
//...other code removed for brevity
[HttpGet]
[Route("api/projects/archive/{id:int}")]//Matches GET api/projects/archive/1
public IHttpActionResult Archive(int id) {
_projectService.Archive(id);
return Ok();
}
}
回答有点晚了,但希望你觉得它有用,
很多时候我们编写代码的方式帮助我们找到了问题的解决方案, 正如 Nkosi 已经回答的那样,正确构建控制器和操作方法将解决问题。
首先检查方法而不是查看 route.config 总是有帮助的,因为默认情况下它将是相同的,除非您提供自定义属性。