我正在尝试使用$ http.get方法来检索记录。我调用了我的空Get方法,而不是接受调用参数的Get方法。有人能告诉我我做错了什么以及如何修复它以便调用正确的Get方法?
这个RegistrationController
// Empty method that gets hit
public HttpResponseMessage Get()
{
var response = new HttpResponseMessage();
return response;
}
// How do I structure my $http.get to have this method called?
public HttpResponseMessage Get(int pilotId)
{
PilotModel pilot = this.RetrievePilot(pilotId);
var response = new HttpResponseMessage();
// If returnValue is null, the email or password was incorrect.
if (pilot != null)
{
response = Request.CreateResponse<PilotModel>(HttpStatusCode.Created, pilot);
}
else
{
response = Request.CreateResponse<PilotModel>(HttpStatusCode.BadRequest, pilot);
}
return response;
}
前端(删除额外代码不需要显示问题......我相信)
var app = angular.module('MyRegistrationApp', []);
app.controller('RegistrationController', function ($scope, $http) {
initializeVariables();
var loggedInUser = JSON.parse(window.sessionStorage.getItem('LoggedInUser'));
if (loggedInUser !== null && loggedInUser.PilotId > 0) {
// Shouldn't this url cause the Get with parametes to be called?
var url = 'api/registration/' + loggedInUser.PilotId;
$(document).ready(function () {
$http({
method: 'GET',
url: url,
}).then(function successCallback(response) {
initializeVariables(response);
}, function errorCallback(response) {
alert(response.statusText);
});
});
}
});
答案 0 :(得分:1)
您的问题是您打算对此进行GET调用
http://my-api-url/api/registration/1
但事实上,你的控制器正在期待这个:
http://my-api-url/api/registration?pilotId=1
只需尝试将url
变量更改为以下示例,您就会看到它采取正确的行动。
var url = 'api/registration?pilotId=' + loggedInUser.PilotId;
这是因为在 GET 请求中,参数作为查询字符串发送。如果您对此感到满意,只需将url
更改为上面的代码即可。如果没有,那么需要在API中进行一些调整,但不要害怕。
<强>这个RegistrationController:强>
[RoutePrefix("api")]
public class RegistrationController : ApiController
{
[Route("registration")]
public HttpResponseMessage Get()
{
var response = new HttpResponseMessage();
return response;
}
[Route("registration/{pilotId:int}")]
public HttpResponseMessage Get(int pilotId)
{
var response = new HttpResponseMessage();
//Your code goes here...
return response;
}
}
通过RegistrationController中的这些修改,您现有的代码将按预期工作。基本上所有“魔力”都是Route
属性,可以让您更好地控制API中的URL。
这条特殊的路线:
[Route("registration/{pilotId:int}")]
创建一个由“api / {controller} /”组成的URL,后跟在约束int
中定义的{pilotId:int}
类型的参数。使用此约束,我们强制在“registration”之后传递的参数必须是int。
我建议您在Attribute Routing上查看本教程,这非常有帮助。