从Web API 2的模板中,post方法总是这样的:
[ResponseType(typeof(MyDTO))]
public IHttpActionResult PostmyObject(MyDTO myObject)
{
...
return CreatedAtRoute("DefaultApi", new { id = myObject.Id }, myObject);
}
我不理解这个< code>CreatedAtRoute()方法。有人能给我解释一下吗?
在.net core WebAPI中,使用此方法返回201代码,这意味着对象已创建。
[Microsoft.AspNetCore.Mvc.NonAction]
public virtual Microsoft.AspNetCore.Mvc.CreatedAtRouteResult CreatedAtRoute (string routeName, object routeValues, object content);
正如您在上面看到的,CreatedAtRoute可以接收3个参数:
routeName 是必须放在方法上的名称,该方法将成为创建后将获取该资源的 URI。
routeValues 它是包含将在命名路由处传递给 GET 方法的值的对象。它将用于返回创建的对象
内容它是创建的对象。
上面的示例显示了一个简单控制器的两种方法的实现,一个是带有绑定名称的简单GET方法,另一个是创建新对象的POST方法。
[Route("api/[controller]")]
[ApiController]
public class CompanyController : Controller
{
private ICompanyRepository _companyRepository;
public CompanyController(ICompanyRepository companyRepository)
{
_companyRepository = companyRepository;
}
[HttpGet("{id}", Name="GetCompany")]
public IActionResult GetById(int id)
{
Company company = _companyRepository.Find(id);
if (company == null)
{
return NotFound();
}
return new ObjectResult(company);
}
[HttpPost]
public IActionResult Create([FromBody] Company company)
{
if (company == null)
{
return BadRequest();
}
_companyRepository.Add(company);
return CreatedAtRoute(
"GetCompany",
new { id = company.CompanyID },
company);
}
}
重要的
>
请注意,CreatedAtRoute(routeName)中的第一个参数必须与Get方法中Name的定义相同。
第二个参数上的对象需要有必要的字段,您可以使用这些字段来检索Get方法上的资源,您可以说它是自己创建的对象的子集
最后一个参数是在主体请求中接收的完整形式的公司对象。
最终
最终结果是,当创建新公司的帖子发送到此API时,您将返回一个类似“API/company/{id}”的路由,该路由将返回新创建的资源
当您使用< code>CreatedAtRoute时,第一个参数是资源的< code>GET的路由名称。不太明显的技巧是,即使指定了正确的方法名,也必须在HttpGet属性上使用Name param才能使它工作。
因此,如果您的< code >帖子中的回复是这样的:
return CreatedAtRoute("Get", routeValues: new { id = model.Id }, value: model);
那么即使方法名为Get,Get方法属性也应该如下所示:
[HttpGet("{id}", Name = "Get")]
对Post方法的调用不仅会返回新的对象(通常是JSON),还会在对获取资源的URI的响应中设置位置头。
注意routeValue
字段名称中的字段名称需要与目标路由中的绑定名称匹配,即需要有一个名为id
的字段来匹配{id}
在HttpGet("{id}"
最后,在某些情况下,应该提到CreatedAtAction
助手可以是更直接的解决方案。
CreatedAtRoute
方法旨在在您调用POST方法来存储一些新对象时将URI返回到新创建的资源。因此,例如,如果您POST一个订单项,您可能会返回像'api/order/11'这样的路由(11显然是订单的id)。
顺便说一句,我同意MSDN文章在理解这一点方面没有用处。您实际返回的路线自然取决于您的路由设置。
问题内容: 情况1:这不会引起?。谁能告诉我为什么这不会导致ConcurrentModificationException。 情况2:这是由于我尝试访问AsyncThread中的线程不安全的人员列表。我可以使我的“人员列表”实现是线程安全的,并且应该可以运行。 谁能解释我到底发生了什么。我无法理解这是如何解决问题的。 案例2是否将实现从更改为推荐? 添加例外: 05-28 20:34:21.073
问题内容: 我不太了解Java中“ this”的用法。如果有人可以帮助我澄清一下,我将不胜感激。 在此网站上显示:http : //docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html “在实例方法或构造函数中,这是对当前对象的引用,该对象是正在调用其方法或构造函数的对象。使用此方法,您可以从实例方法或构造函数中引用当前对象的任何成员。
问题内容: 有人可以在hibernate状态下向我解释吗?我很难理解它。 如果可以举一个例子来解释它,那就最棒了,并且它在哪种用例中最适用? 问题答案: 这是Object DB的一个很好的解释。 指定ManyToOne或OneToOne关系属性,该属性提供EmbeddedId主键,EmbeddedId主键内的属性或父实体的简单主键的映射。value元素指定关系属性所对应的组合键中的属性。如果实体的
问题内容: 我想根据情况来确定状态字段,但是我得到的是空值。 问题答案: 您的子查询没有关联子句!他们所做的只是查询查询表中是否有任何一行不为null。 如果您对特定状态感兴趣,则必须查询该状态,例如: 但是,我怀疑您对 单个 项目的状态不感兴趣。相反,您想知道一堆行的状态。在这种情况下,将 单个 值存储在变量中将无济于事。您需要将其合并到查询中,并将子查询与外部查询相关联,如下所示(请参见表达式
本文向大家介绍有人可以向我解释JavaScript变量之前的加号吗?,包括了有人可以向我解释JavaScript变量之前的加号吗?的使用技巧和注意事项,需要的朋友参考一下 变量之前的加号(+)定义您要使用的变量是数字变量。 在下面的代码中,有关于加号的简短描述。以下是代码- 示例 要运行上述程序,您需要使用以下命令- 输出结果 在这里,我的文件名为demo149.js。这将产生以下输出-
我从一位同事的代码中读到了这几行: 我认为这将为Bean classA和classB创建2个数据源。为了注入数据源,我们需要如下内容: 但是Spring只创建了一个数据源,this.mysqlDataSource()每次都返回相同的数据源。它是怎么发生的?如果我确实需要另一个数据源,我需要立即创建它?