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 总是有帮助的,因为默认情况下它将是相同的,除非您提供自定义属性。