简体   繁体   English

asp.net core api PUT 请求从不命中方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM