首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASP.Net Web无法在抽象基类中使用CreatedAtRoute

ASP.Net Web无法在抽象基类中使用CreatedAtRoute
EN

Stack Overflow用户
提问于 2017-05-08 15:28:32
回答 2查看 1.6K关注 0票数 2

在我的ASP.Net核心Web项目中有一个通用的抽象控制器,带有POST处理:

代码语言:javascript
运行
复制
 [HttpPost]
 public async Task<IActionResult> Create([FromBody]R itemDto)
 {
     var ret = await _service.CreateNewItemAsync(itemDto);
     return CreatedAtRoute("Get", new { id = ret.Id }, ret);
 }

“Get”路线是这样的:

代码语言:javascript
运行
复制
 [HttpGet("{id}", Name = "Get")]
 public async Task<R> GetAsync(int id)
 {
     var model = await _service.GetItemAsync(id);

     return model;
 }

我有两个Controller类,它们继承于这个Base,当我试图对其中一个控制器进行简单的获取时,会得到以下错误消息:

错误1:具有相同名称“Get”的属性路由必须具有相同的模板: Action:'MyApi.WebApi.Controllers.FooController.GetAsync‘- template:'api/foo/{id}’'MyApi.WebApi.Controllers.BarController.GetAsync‘-’MyApi.WebApi.Controllers.BarController.GetAsync‘:'api/bar/{id}’

这是非常明显的原因,我得到这个错误,但我不知道如何使用一个命名的路线,在一个基础控制器。

谁能给我指明正确的方向?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-08 15:58:12

使用路由名称参数化BaseController逻辑。从父级删除任何路由逻辑。使用const string将子控制器中的属性参数化。然后将此字符串传递给父程序:

代码语言:javascript
运行
复制
public class BaseController : Controller
{
    //no routing attributes
    public IActionResult CreateImpl(string routeName)
    {
        //place any logic here
        return CreatedAtRoute(routeName, new object());
    }
}

[Route("api/[controller]")]
public class FooController : BaseController
{
    private const string _getRouteName = "Get_" + nameof(FooController);

    [HttpPost]
    public async Task<IActionResult> Create()
    {
        return CreateImpl(_getRouteName);
    }

    [HttpGet(Name = _getRouteName)]
    public override string Get()
    {
        return base.Get();
    }
}
票数 3
EN

Stack Overflow用户

发布于 2018-02-21 14:12:11

使用CreatedAtAction而不是CreateAtRoute,后者仍将返回状态201,您不需要担心路由名称。多亏了@CodeFuller,我才解决了同样的问题。

代码语言:javascript
运行
复制
 return CreatedAtAction(nameof(GetAsync), new { id = 123 }, createObjectDto);

请参阅以下链接Route Name for HttpGet attribute Name for base generic controller class in asp.net core

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43851562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档