繁体   English   中英

我可以用 web api 控制器的传统路由模式替换属性路由吗?

[英]Can I replace the attribute routing with traditional route patterns for the web api controllers?

我有 web api ValuesController (标有[ApiController] )和方法 [HttpPost] GetValue 里面。

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    [HttpGet]
    public IEnumerable<string> GetValue()
    {
        return new string[] { "value1", "value2" };
    }
}

我修改了 Startup.cs

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapRazorPages();
            endpoints.MapControllerRoute("default", "{controller}/{action}"); // added
        });

现在我希望该方法的路由应该是/api/Values/GetValue当它是/api/Values - 意味着{action}被忽略?

可以将默认路由配置为在 uri 中包含 {action} 吗? 现在我强制使用[HttpGet(nameof(GetValue))]来赋予动作看起来很冗长。

我知道标有 ApiController 的 controller 是特定的东西,但它应该对 MapControllerRoute 做出“反应”吗? 我在文档中找不到它。

属性路由总是比默认路由具有更高的优先级。 所以如果你想默认拥有 /api/Values/GetValue 你可以改变 controller 属性

[Route("api/[controller]/[action]")]
[ApiController]
public class ValuesController : ControllerBase

或者,如果您想使用默认启动路由,则必须从 controller 中删除属性路由并修复您的默认路由:

endpoints.MapControllerRoute("default", "api/{controller}/{action}"); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM