C# web api中的自定义路由只是重定向到当前页面
作为MVC web api中的一个noob,我可能缺少一些非常明显的东西 但是,在我的C# web api中的自定义路由只是重定向到当前页面,c#,asp.net-mvc,asp.net-web-api2,asp.net-web-api-routing,C#,Asp.net Mvc,Asp.net Web Api2,Asp.net Web Api Routing,作为MVC web api中的一个noob,我可能缺少一些非常明显的东西 但是,在我的ProjectController中,我有以下带有属性的方法(我知道这种方法应该是POST的,但只是简单地测试而已……): 但是,当我打开我的URL时,例如: http://localhost:49923/api/projects/archive/1 页面只是重定向到当前URL,而不调用存档方法。我在方法上也有一个断点来验证它是否被命中 我最好的猜测是,我还必须更新我的web api路由配置,这是默认配置,但
ProjectController
中,我有以下带有属性的方法(我知道这种方法应该是POST的,但只是简单地测试而已……):
但是,当我打开我的URL时,例如:
http://localhost:49923/api/projects/archive/1
页面只是重定向到当前URL,而不调用存档方法。我在方法上也有一个断点来验证它是否被命中
我最好的猜测是,我还必须更新我的web api路由配置,这是默认配置,但我只是假设路由属性足够了
以下是我的web 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"));
}
我做错了什么?:-)
编辑:
Clearification 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总是很有帮助的,因为默认情况下,除非您提供自定义属性,否则它将是相同的。Clearify
页面只重定向到当前URL,而不调用存档方法。
不清楚。同时显示控制器。读取:
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();
}
}