这是我调用GetFileContents的ajax调用:
views.titleClick = function (e) {
var grid = $("#documentsGrid").data("kendoGrid");
var docId = grid._data[0].DocumentId;
$.ajax({
type: "GET",
//"Document/GetByReview?reviewId=" + that.selectedReview.ReviewId;
url: constants.serviceUrl + "Document/GetFileContents?DocumentId=" + docId,
contentType: "application/json; charset=utf8",
})
};
以下是我的Controller GetFileContents
[HttpGet]
public HttpResponseMessage GetFileContents(int id)
{
DataResponseSingle<Document> result = BusinessAccess.GetById(id);
if (result.ResponseType != ResponseType.Success)
{
return CreateHttpResponse(result);
}
if (result.Data == null || result.Data.DocumentData == null)
{
return CreateHttpResponse(ResponseType.NotFound);
}
return CreateStreamContentHttpResponse(result.Data.DocumentData, "application/octet-stream", result.Data.Name);
}
每当titleClick被实例化时,我都会收到一条错误
“{”消息“:”找不到与请求URI'http://localhost/Services/HumanResources/api/Document/GetFileContents?DocumentId=4'匹配的HTTP资源。“,”MessageDetail“:”否 在控制器'Document'上找到了匹配的动作 请求。 “}”
。我在这个服务文件中有其他控制器,我可以称之为完全正常。我猜我的语法有问题吗?请帮忙,我环顾四周,但找不到具体问题。谢谢!
答案 0 :(得分:0)
更改您的JS参数DocumentId以匹配您的控制器ID。
$.ajax({
type: "GET",
//"Document/GetByReview?reviewId=" + that.selectedReview.ReviewId;
url: constants.serviceUrl + "Document/GetFileContents?id=" + docId,
contentType: "application/json; charset=utf8",
});
答案 1 :(得分:0)
asp.net Web API给我带来了同样的错误,但我用不同的方法解决了这个问题:
第一种方法
我用AclController将控制器名称更改为AuthorizeController并解决了我的问题。
第二种方法
如果你使用带有string,int,bool等类型的方法参数,也许这个方法可以解决你的问题。然后接受这个错误并且不使用string,int,bool等类型只使用类或接口等那么类型可能解决了你的问题。