用于删除的ASP.net控制器-“未找到与请求URI匹配的HTTP资源”

用于删除的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,

我在SQL中有一个名为person\u connections\u delete的存储过程。我已经编写了一个控制器来调用存储的进程,但是,这个错误消息不断出现

消息:未找到与请求URI匹配的HTTP资源。, messageDetail:在与请求匹配的控制器“PersonConnections”上未找到任何操作

这是存储的进程。我将三个参数传递到存储的delete进程中

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方法。我已经编辑了我的答案。