簡體   English   中英

無法在 Visual Studio (2019 v) 中將參數傳遞給 Controller

[英]Unable to pass parameter to the Controller in Visual Studio (2019 v)

我目前無法將我創建的方法中的參數傳遞給 Controller。 當我使用 postman 中的參數手動運行它時,一切正常。

如何將參數傳遞給 Controller? 有沒有辦法將其設置為自動路由,而不是根據不同的參數創建個人路由? 這是一個非常基礎的應用程序。

錯誤消息:{“消息”:“未找到與請求 URI 'https://localhost:44364/api/WebInterface/RemoveNurse' 匹配的 HTTP 資源。”,“MessageDetail”:“未在 controller 上找到任何操作”與請求匹配的 WebInterface'。"}

CONTROLLER:

using WebInterfaceAPI.Helpers;
using WebInterfaceAPI.Services;
using WebInterfaceAPI.Models;
using Newtonsoft.Json;
using System.Data.SqlClient;
using System.Web.Http;
using System.Net;

namespace WebInterfaceAPI.Controllers
{
    public class WebInterfaceController : ApiController
    {
        private NurseService NurseService { get; set; }

        public WebInterfaceController()
        {
            NurseService = new NurseService();
        }

        #region Nurse Actions
        /// <summary>
        /// Removes specified nurse
        /// </summary>
        /// <param name="nurseID"></param>
        /// <returns></returns>
        [HttpPost]
        public IHttpActionResult RemoveNurse(int nurseID)
        {
            APIResponseModel result = NurseService.removeNurse(nurseID);
            if (result.IsSuccess)
            {
                return Ok(result.Message);

            }
            else
            {
                return Content(HttpStatusCode.BadRequest, result.Message);
            }
        }

        #endregion
    }
};

路由配置.cs

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { 
                action = "Index", 
                id = UrlParameter.Optional 
            }
        );
    }
}

方法:(護士服務.cs)

public APIResponseModel removeNurse(int nurseID)
        {
            using (var dbContext = new DataBase())
            {
                OnCallNurses_Nurses rowToDelete = (from nurse in dbContext.OnCallNurses_Nurses
                                                   where nurse.id == nurseID
                                                   select nurse).SingleOrDefault();

                if (rowToDelete == null)
                {
                    return new APIResponseModel(false, "Cannot delete nurse.");
                }
                else
                {
                    dbContext.OnCallNurses_Nurses.Remove(rowToDelete);
                    dbContext.SaveChanges();
                    return new APIResponseModel(true, "Nurse successfully removed.");
                }
            }
        }

前端

function removeNurse(nID) {

$('#loader').removeClass('d-none');
var webMethod = "https://localhost:44364/api/WebInterface/RemoveNurse";
// var webMethod = "https://webinterface.com/api/api/WebInterface/RemoveNurse";

$.ajax({
    type: "POST",
    url: webMethod,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    data: {
        nurseID: nID
    },
    success: function (data) {
        alert(data);
        // $(nurseRow).remove();
        $('#loader').addClass('d-none');

    },
    error: function (xhr, status) {
        console.log(xhr.responseText);
        console.log(xhr.status);
    }
});
};

您必須修復 url 並從 ajax 中刪除 contentType 和 type


$.ajax({
        type: "POST",
        url:  "https://localhost:44364/api/WebInterface/RemoveNurse",
        data: {
            nurseID: nID
        },
......
});

並更改動作 header:

[Route("~/api/WebInterface/RemoveNurse")]
 public IHttpActionResult RemoveNurse(int nurseID)

或更改您的 controller header

[Route("api/[controller]/[action]")]
public class WebInterfaceController : ApiController

並將屬性路由添加到配置:

 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();

但更好的方法是使用路由傳遞 id


$.ajax({
        url:  "https://localhost:44364/api/WebInterface/RemoveNurse/"+nID,
        success: function (data) 
......
});

在這種情況下,動作將是

[Route("~/api/WebInterface/RemoveNurse/{nurseId}")]
 public IHttpActionResult RemoveNurse(int nurseID)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM