如何从 ASP.NET MVC 到 ASP.NET Core Web API 的 PUT?
Posted
技术标签:
【中文标题】如何从 ASP.NET MVC 到 ASP.NET Core Web API 的 PUT?【英文标题】:How to make PUT from ASP.NET MVC to ASP.NET Core Web API? 【发布时间】:2022-01-02 16:29:22 【问题描述】:我在使用 Web API 的 put 方法时遇到问题。我正在 ASP.NET MVC 中使用 Kendo UI Jquery,它必须通过 API 进行 PUT。
请指导我做错了什么,这也是错误代码。
这是我迄今为止尝试过的:
API 控制器:
[HttpPut] //It never reaches here
[Route("api/Update")]
public async Task<IActionResult> Update(Guid id, UpdateProductCommand command)
if (id != command.Id)
return BadRequest();
return Ok(await _mediator.Send(command));
ASP.NET MVC 控制器:
public ActionResult Update(Guid id, [FromBody]Product product)
using (var client = new HttpClient())
client.BaseAddress = new Uri("https://localhost:44393");
var json = JsonConvert.SerializeObject(product);
var contentData = new StringContent(json, Encoding.UTF8, "application/json");
var response = client.PutAsync("/api/Product", contentData);
var result = response.Result;
if (result.IsSuccessStatusCode)
return RedirectToAction("Index");
return View(product);
使用 Kendo UI 查看:
<script>
//----------TRANSPORT -------------------//
var dataSource = new kendo.data.DataSource(
batch: false,
transport:
read:
url: "https://localhost:44393/api/Product",
dataType: "json"
,
update:
url: "@Url.Action("Update", "Home")",
dataType: "json",
,
create:
url: "@Url.Action("Create", "Home")",
dataType: "json",
contentType: "application/json",
type: "POST"
,
destroy:
url: "@Url.Action("Delete", "Home")",
dataType: "json",
,
,
pageSize: 5,
schema:
model:
id: "id",
fields:
id: editable: false, nullable: true ,
productName: type: "string", editable: true ,
prouctSKU: type: "string", editable: true ,
productType: type: "string", editable: true ,
);
错误:
jquery.min.js:4 GET https://localhost:44385/Home/Update?id=1e8332f1-ae69-4997-b851-08d9ae81e7de&productName=sd&prouctSKU=string&productType=string 415
【问题讨论】:
【参考方案1】:在您的 MVC 控制器中,您在非 async
方法中使用 PutAsync
。
将您的操作更改为async
方法,将ActionResult
更改为async Task<ActionResult>
并在调用PutAsync
时使用await
关键字。
或者,如果您不想将方法更改为 async
方法,请将调用 client.PutAsync
更改为 client.Put
【讨论】:
如果你想阅读更多关于异步编程的信息,我建议你阅读官方文档docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…或者有关于堆栈的讨论***.com/questions/14455293/…【参考方案2】:您需要告诉您的组件发出PUT
请求,否则它将默认为GET
。根据docs,你应该指定请求的type
。例如:
update:
url: "@Url.Action("Update", "Home")",
dataType: "json",
type: "PUT" //<---- Add this
,
【讨论】:
谢谢大卫的回答,已经试过了但是不行,我想我的问题可能出在我的 MVC 控制器上。以上是关于如何从 ASP.NET MVC 到 ASP.NET Core Web API 的 PUT?的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据从表示层传递到业务逻辑层? (ASP.NET MVC 5)
从 ASP.NET WebForms 迁移到 ASP.NET MVC 的建议?