[英]asp.net core api PUT request never hits method
I am attempting to create a web api in asp.net.我正在尝试在 asp.net 中创建一个 web api。 I am trying to use ajax to send my query parameters to the action method, but it never reaches it.
我正在尝试使用 ajax 将我的查询参数发送到 action 方法,但它从未到达它。 FYI I am not well experienced with ajax.
仅供参考,我对 ajax 不太熟悉。
I am trying to use a form in my view to pass the data to the action method but it does nothing.我试图在我的视图中使用一个表单将数据传递给操作方法,但它什么也不做。 Here is my view:
这是我的观点:
<form action="/api/values" method="put">
<ul>
<li>
<input type="text" id="Id" />
</li>
<li>
<input type="text" id="FirstName" />
</li>
<li>
<button onclick="Update()" class="btn btn-primary">Update</button>
</li>
</ul>
</form>
Here is my ajax:这是我的ajax:
<script>
function Update(Id, FirstName) {
$.ajax({
url: "/api/values/" + Id + "/" + FirstName,
type: "PUT",
data: {
Id: Id,
FirstName: FirstName
},
success: function () {
alert("success");
}
)};
}
</script>
My url will look like: /api/values?Id=123XXXjxn&FirstName=Billy
我的网址看起来像:
/api/values?Id=123XXXjxn&FirstName=Billy
This never reaches my controller:这永远不会到达我的控制器:
[HttpPut("{Id}/{FirstName}")]
public ActionResult PutRequest([FromQuery] string Id, [FromQuery] string FirstName)
{
//do stuff
}
I have tried it with just the [HttpPut]
attribute, and used the [Route("{Id}/{FirstName}")]
attribute, and without [FromQuery]
in the parameters.我仅使用
[HttpPut]
属性进行了尝试,并使用了[Route("{Id}/{FirstName}")]
属性,而参数中没有[FromQuery]
。 I am stuck and am thinking it has to do with my ajax, and my method not being able to read the query parameters but I am not totally sure.我被卡住了,我认为这与我的 ajax 和我的方法无法读取查询参数有关,但我不完全确定。
Your code should look like that你的代码应该是这样的
Controller控制器
[Route("api/values")]
public class ValuesController : Controller
{
[HttpPut("{Id}/{FirstName}")]
public ActionResult PutRequest(string Id, string FirstName)
{
return new EmptyResult();
}
}
View看法
<script>
function Update(Id, FirstName) {
$.ajax({
url: "/api/values/" + Id + "/" + FirstName,
type: "PUT",
success: function () {
alert("success");
}
});
}
</script>
Since you do ajax call, you don't need form attributes, prevent navigating to url with event.preventDefault()
由于您进行 ajax 调用,因此不需要表单属性,防止使用
event.preventDefault()
导航到 url
<script>
function Update(Id, FirstName) {
event.preventDefault();
$.ajax({
url: "/api/values/" + Id + "/" + FirstName,
type: "PUT",
success: function () {
alert("success");
}
});
}
</script>
<form>
<ul>
<li>
<input type="text" id="Id" />
</li>
<li>
<input type="text" id="FirstName" />
</li>
<li>
<button type="button" onclick="Update()" class="btn btn-primary">Update</button>
</li>
</ul>
</form>
And, of course, you need some version of jquery.而且,当然,您需要某些版本的 jquery。 You can get latest here
您可以在此处获取最新信息
<script src="https://code.jquery.com/jquery-3.5.1.js" integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc=" crossorigin="anonymous"></script>
Your Controller code should look like that你的控制器代码应该是这样的
[Route("api/values")]
public class ValuesController : Controller
{
[Route("~/api/values/{Id}/{FirstName}")]
public ActionResult PutRequest(string Id, string FirstName)
{
.......
}
}
Your url shood look like: /api/values/123XXXjxn/Billy
Change in javascript javascript中的变化
type: "PUT",
data: {
Id: Id,
FirstName: FirstName
},
To到
type: "POST",
data: null,
and check if you have app.UseRouting();并检查您是否有 app.UseRouting(); in Configure section of your startup file.
在启动文件的配置部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.