- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在我的 ASP.NET Core 应用程序中,我有一个这样的 Controller 操作:
[HttpPost]
public async Task<IActionResult> CreateSubscriber([FromBody] SubscriberDef subscriber)
{
//...implementation removed
var link = Url.Link("SubscriberLink", new { id = subscriber.ID });
return Created(link, null);
}
以上代码按预期工作。但是,如果我使用内置方法“CreatedAtRoute”,则会出现异常:
[HttpPost]
public async Task<IActionResult> CreateSubscriber([FromBody] SubscriberDef subscriber)
{
//...implementation removed
return CreatedAtRoute("SubscriberLink", new { id = subscriber.ID });
}
异常(exception)情况是:
System.InvalidOperationException: No route matches the supplied values.
异常导致服务返回 500 状态代码。
这两种情况都是相同的路线,所以我不知道为什么第一个示例可以正常工作而第二个示例不能正常工作。
我的 project.json
包含这个:
"frameworks": {
"dnx46": { },
"dnxcore50": { }
},
为了便于引用,命名路由由两部分组成。首先是 Controller 前缀:
[Route("api/[controller]")]
public class SubscribersController : Controller
{
// ...
}
第二个是 GET 操作,其中实际的 "SubscriberLink"
路由被命名为:
[HttpGet("{id}", Name = "SubscriberLink")]
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(Subscriber))]
public async Task<IActionResult> GetSubscriber(Guid id)
{
//...implementation removed...
return Ok(subscriber);
}
想法?
最佳答案
您使用了错误的 CreatedAtRoute
重载。请改用采用三个参数的重载。
例如,以下在我的机器上运行。
[Route("api/[controller]")]
public class SubscribersController : Controller
{
public IActionResult Index()
{
var subscriber = new
{
Id = Guid.NewGuid(),
FirstName = "Shaun",
LastName = "Luttin"
};
// overload with three arguments
return CreatedAtRoute(
routeName: "SubscriberLink",
routeValues: new { id = subscriber.Id },
value: subscriber);
}
[HttpGet("{id}", Name = "SubscriberLink")]
public IActionResult GetSubscriber(Guid id)
{
var subscriber = new
{
Id = id,
FirstName = "Shaun",
LastName = "Luttin"
};
return new JsonResult(subscriber);
}
}
结果是 201 响应。响应的正文包含我们创建的实体的详细信息(value
参数),响应的 Location header 包含实体的 URI。
CreatedAtRoute
有三个重载。
CreatedAtRoute(object routeValues, object value)
CreatedAtRoute(string routeName, object value)
CreatedAtRoute(string routeName, object routeValues, object value)
如果我们想传递路由名称和路由值,我们使用带有三个参数的重载。如果我们不想返回我们创建的实体的详细信息,我们可以为第三个参数传递 null
,
关于c# - ASP.NET 核心 "CreatedAtRoute"失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36560239/
我正在尝试将我的 Web Api 项目转换为使用属性路由。我不明白的一件事是 POST 请求的 CreatedAtRoute 方法。在我的 WebApiConfig.cs 中,我曾经有一个 confi
我在使用以下代码时遇到问题,现在我明白问题出在哪里了,但我没有解决方案来让代码执行我想要的操作。 // POST: api/Airports [HttpPost] public asy
从 Web API 2 的模板来看,post 方法总是这样的: [ResponseType(typeof(MyDTO))] public IHttpActionResult PostmyObject(
我已经搜索了所有关于这个问题的帖子,但我没有找到任何可接受的答案来解决这个问题。我有一个像这样获取和发布的 Controller : [ApiController] [ApiVersion(Strin
使用 ASP.NET Core 2.0.0 Web API,我正在尝试构建一个 Controller 来执行数据库插入。信息可以很好地插入数据库,但返回 CreatedAtRoute 会引发“Inva
在我的 ASP.NET Core 应用程序中,我有一个这样的 Controller 操作: [HttpPost] public async Task CreateSubscriber([FromBod
我想通知我的api使用者有关新创建对象的位置。我知道有Created() CreatedAtRoute()和CreatedAtAction(),但是我不确定如何使用它。 这是我尝试过的: 我有一个指向
我的 ASP.Net 核心 Web Api 项目中有一个带有 POST 处理的通用抽象 Controller : [HttpPost] public async Task Create([From
我有以下情况 [Route("api/[controller]")] [ApiController] public class FooController: ControllerBase {
从 2.2 更新到 ASP.NET Core 3.0 后,我收到错误消息: No route matches the supplied values 这在执行 CreateAsync() 后立即出现.
这些功能的根本区别是什么?我所知道的是所有三个结果都是 201,这适合成功的 POST 请求。 我只遵循在网上看到的示例,但它们并没有真正解释他们为什么要做他们正在做的事情。 我们应该为 GET 提供
我是一名优秀的程序员,十分优秀!