C# 无法将参数传递到Visual Studio中的控制器(2019 v)
我当前无法将参数从我创建的方法传递到控制器。当我用postman中的参数手动运行它时,一切正常 如何将参数传递给控制器?有没有办法将其设置为自动路由,而不是根据不同的参数创建单独的路由?这是一个非常基本的应用程序 错误消息: {“Message”:“未找到与请求URI匹配的HTTP资源”https://localhost:44364/api/WebInterface/RemoveNurse“.”,“MessageDetail”:“在控制器“WebInterface”上未找到与请求匹配的操作。”} 控制器:C# 无法将参数传递到Visual Studio中的控制器(2019 v),c#,asp.net,visual-studio,routes,C#,Asp.net,Visual Studio,Routes,我当前无法将参数从我创建的方法传递到控制器。当我用postman中的参数手动运行它时,一切正常 如何将参数传递给控制器?有没有办法将其设置为自动路由,而不是根据不同的参数创建单独的路由?这是一个非常基本的应用程序 错误消息: {“Message”:“未找到与请求URI匹配的HTTP资源”https://localhost:44364/api/WebInterface/RemoveNurse“.”,“MessageDetail”:“在控制器“WebInterface”上未找到与请求匹配的操作。”}
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
}
};
方法:(NurseService.cs)
前端
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
},
......
});
并更改操作标题:
[Route("~/api/WebInterface/RemoveNurse")]
public IHttpActionResult RemoveNurse(int nurseID)
或者更改控制器标题
[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)
你也可以发布你的控制器代码吗?嗨,@Sergey我更新了控制器部分。谢谢你的尝试,但我仍然收到相同的错误消息。我更新了控制器代码,因为它应该是nurseID,而不是id。您在我的代码中看到id了吗?这是我的错误。我在控制器中的参数是id,而不是nurseID。我想你认为这是个错误。不幸的是,即使在将属性添加到RouteConfig.cs之后,我仍然会收到相同的错误。谢谢你的努力。我很乐意帮忙。
$.ajax({
url: "https://localhost:44364/api/WebInterface/RemoveNurse/"+nID,
success: function (data)
......
});
[Route("~/api/WebInterface/RemoveNurse/{nurseId}")]
public IHttpActionResult RemoveNurse(int nurseID)