Asp.net core 如何将修补程序与ASP.NET Core和Postman一起使用?
在《邮递员》上,我正试图向我的OData控制器发出Asp.net core 如何将修补程序与ASP.NET Core和Postman一起使用?,asp.net-core,odata,Asp.net Core,Odata,在《邮递员》上,我正试图向我的OData控制器发出补丁请求。我想我把它设置正确了,但它不工作。有人能帮忙吗 我的控制器如下所示: [授权] 公共类SMSNotesController:ODataController { 私有只读ApplicationDbContext\u appDbContext; 公共SMSNotesController(ApplicationDbContext appDbContext) { _appDbContext=appDbContext; } [启用查询] 公共异
补丁
请求。我想我把它设置正确了,但它不工作。有人能帮忙吗
我的控制器如下所示:
[授权]
公共类SMSNotesController:ODataController
{
私有只读ApplicationDbContext\u appDbContext;
公共SMSNotesController(ApplicationDbContext appDbContext)
{
_appDbContext=appDbContext;
}
[启用查询]
公共异步任务修补程序([FromODataUri]长noteID,[FromBody]增量note)
{
如果(!ModelState.IsValid)
{
返回请求(ModelState);
}
var entity=await\u appDbContext.SMS\u Notes.FindAsync(noteID);
if(实体==null)
{
返回NotFound();
}
注:补丁(实体);
尝试
{
wait_appDbContext.saveChangesSync();
}
catch(DbUpdateConcurrencyException)
{
bool SMS\u NoteExists=wait\u appDbContext.SMS\u Notes.AnyAsync(a=>a.Id==noteID);
如果(!SMS_NoteExists)
{
返回NotFound();
}
其他的
{
投掷;
}
}
更新申报表(实体);
}
}
我已经在IModelConfiguration中注册了ODATA控制器
公共类ODataModelConfiguration:IModelConfiguration
{
公共无效应用(ODataModelBuilder builder,ApiVersion)
{
建筑商实体集(“SMSNotes”);
}
}
我错过了什么?我得到了404未被找到的回复。在谷歌搜索了一番之后(没有任何关于这个的好文档),我拼凑了这个
这是使用ASP.NET Core 2.2和OData 7.5.0实现的
基本上:
- 确保您提供的补丁参数带有括号中的参数
- 在后面加一个斜杠
- 提供API版本
[AcceptVerbs(“补丁”、“合并”)]
公共异步任务修补程序([FromODataUri]长密钥,增量修补程序)
{
如果(!ModelState.IsValid)
{
返回请求(ModelState);
}
var entity=await\u appDbContext.SMS\u Notes.FindAsync(key);
if(实体==null)
{
返回NotFound();
}
补丁。补丁(实体);
尝试
{
wait_appDbContext.saveChangesSync();
}
catch(DbUpdateConcurrencyException)
{
bool SMS\u NoteExists=wait\u appDbContext.SMS\u Notes.AnyAsync(a=>a.Id==key);
如果(!SMS_NoteExists)
{
返回NotFound();
}
其他的
{
投掷;
}
}
更新申报表(实体);
}
[AcceptVerbs("PATCH", "MERGE")]
public async Task<IActionResult> Patch([FromODataUri] long key, Delta<SMS_Note> patch)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var entity = await _appDbContext.SMS_Notes.FindAsync(key);
if (entity == null)
{
return NotFound();
}
patch.Patch(entity);
try
{
await _appDbContext.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
bool SMS_NoteExists = await _appDbContext.SMS_Notes.AnyAsync(a => a.Id == key);
if (!SMS_NoteExists)
{
return NotFound();
}
else
{
throw;
}
}
return Updated(entity);
}