用于删除的ASP.net控制器-“未找到与请求URI匹配的HTTP资源”
我在SQL中有一个名为person\u connections\u delete的存储过程。我已经编写了一个控制器来调用存储的进程,但是,这个错误消息不断出现 消息:未找到与请求URI匹配的HTTP资源。, messageDetail:在与请求匹配的控制器“PersonConnections”上未找到任何操作 这是存储的进程。我将三个参数传递到存储的delete进程中用于删除的ASP.net控制器-“未找到与请求URI匹配的HTTP资源”,asp.net,sql-server,Asp.net,Sql Server,我在SQL中有一个名为person\u connections\u delete的存储过程。我已经编写了一个控制器来调用存储的进程,但是,这个错误消息不断出现 消息:未找到与请求URI匹配的HTTP资源。, messageDetail:在与请求匹配的控制器“PersonConnections”上未找到任何操作 这是存储的进程。我将三个参数传递到存储的delete进程中 ALTER PROC [dbo].[person_connections_delete] @PersonId INT,
ALTER PROC [dbo].[person_connections_delete]
@PersonId INT,
@FriendId INT,
@Status INT
AS
/*
DECLARE
@_personId INT = 1,
@_friendId INT = 200,
@_status INT = 1
EXEC person_connections_delete
@_personId,
@_friendId,
@_status
*/
BEGIN
DELETE
person_connections
WHERE
PersonId = @PersonId and FriendId = @FriendId
IF (@Status = 1)
DELETE
person_connections
WHERE
PersonId = @FriendId and FriendId = @PersonId
END
服务和控制器。在C中:
public void Delete(int personId, int friendId, int status)
{
_dataProvider.ExecuteNonQuery(
"person_connections_delete",
inputParamMapper: delegate (SqlParameterCollection paramCol)
{
paramCol.AddWithValue("@PersonId", personId);
paramCol.AddWithValue("@FriendId", friendId);
paramCol.AddWithValue("@Status", status);
}
);
}
[AllowAnonymous]
[RoutePrefix("api/personconnections")]
public class PersonConnectionsController : ApiController
{
private IPersonConnectionsService _personConnectionsService;
[HttpDelete]
[Route("delete")]
public HttpResponseMessage Delete(int personId, int friendId, int status)
{
try {
if (ModelState.IsValid) {
ItemResponse<PersonConnectionsDeleteDomain> resp = new ItemResponse<PersonConnectionsDeleteDomain>();
_personConnectionsService.Delete(personId, friendId, status);
return Request.CreateResponse(HttpStatusCode.OK, resp);
} else {
return Request.CreateResponse(HttpStatusCode.NotModified, ModelState);
}
} catch (Exception ex) {
return Request.CreateResponse(HttpStatusCode.BadRequest, ex);
}
}
}
。WebAPI无法以本机方式绑定正文中的多个参数
当参数具有[FromBody]时,Web API使用内容类型标头
选择格式化程序。在本例中,内容类型为
application/json,请求主体是原始json字符串,而不是
JSON对象
最多允许从中读取一个参数
消息体。所以这是行不通的:
// Caution: Will not work!
public HttpResponseMessage Post([FromBody] int id, [FromBody] string name) { ... }
此规则的原因是请求正文可能存储在
只能读取一次的非缓冲流
还有其他一些问题,比如如何实现这一点。但是,除非您有真正的理由这样做,否则我认为您最好使用或查询字符串参数。我建议您看看路由是如何解决的。您提到WebAPI不能绑定多个POST参数,但我假设DELETE是相同的?对不起,我的错,我没有注意到它是一个DELETE方法。但是是的,它应该与post方法相同。文档中并没有提到任何关于绑定的内容,这些内容来自于主体限制,不适用于delete方法或仅适用于post方法。我已经编辑了我的答案。