从 angularJs 控制器向网络 api 2 传递多个参数
Passing multiple paramters to web api 2 from angularJs Controller
我正在尝试从我的 angular 控制器调用 Web api 控制器上的 httpGet,但我无法执行任何操作来传递多个参数。
我试过将参数添加到路由中,(route/{email}/{firstName}/{lastName}
.
我可以验证 angular 方法 getCurrentAlumniInfo
正在被调用并且正在尝试路由到控制器。我使用了 Postman,具有以下 URI,
"localHost: PortNumber/api/alumni/currentAlumniInfo?Email=flintrock&FirstName=Fredf&LastName=Flintstone"
这是相关的片段。一、WebApiConfig使用属性路由:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
}
}
下一个我的 api 控制器
[RoutePrefix("api/Alumni")]
public class AlumniController : ApiController
{
private readonly AlumniRepository _repository;
private readonly AuthRepository _authRepository;
public AlumniController()
{
_repository = new AlumniRepository();
_authRepository=new AuthRepository();
}
[Route("alumniInfo")]
[HttpGet]
public IHttpActionResult GetAlumniInfo([FromUri]string email,string firstName, string lasttName)
{
return Ok("Success" + lasttName);
}
}
}
最后,angular(第 1 节)
var getCurrentAlumniInfo = function() {
var alumniData = alumniModel.buildAlumniMatchData();
var deferred = $q.defer();
//string email, string lastName,string middleName, string firstName
$http.get(serviceBase + 'api/alumni/alumniInfo',
{
params: {
Email: encodeURIComponent(alumniData.email),
FirstName: alumniData.firstName,
//MiddleName: alumniData.middleName,
LastName: alumniData.lastName
}
})
.then(function(response) {
deferred.resolve(response);
})
.catch(function(response) {
alert(response.statusCode + " error: " + response.status);
deferred.reject(response);
});
return deferred.promise;
};
为了它的价值,我使用的是框架的 v. 4.5.2 和 Visual Studio 2015。
感谢任何帮助。
要么将 get 方法更改为 post 并将参数作为模型传递,以便您可以接收模型作为 API 的参数。
服务
$http.post(serviceBase + 'api/alumni/alumniInfo',
{
params: {
Email: encodeURIComponent(alumniData.email),
FirstName: alumniData.firstName,
//MiddleName: alumniData.middleName,
LastName: alumniData.lastName
}
})
.then(function(response) {
...
})
.catch(function(response) {
...
});
型号
public class RecieveModel
{
public string Email {get;set;}
public string FirstName {get;set;}
public string LastName{get;set;}
}
API
[Route("alumniInfo")]
[HttpPost]
public HttpResponseMessage GetAlumniInfo(ReceiveModel model)
{
return Request.CreateResponse(HttpStatusCode.OK);
}
或
更改路由配置 defaults: new { id = RouteParameter.Optional ,id1 = RouteParameter.Optional,id2 = RouteParameter.Optional}
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}/{id1}/{id2}",
defaults: new { id = RouteParameter.Optional ,id1 = RouteParameter.Optional,id2 = RouteParameter.Optional});
万一其他人来到这里寻求解决问题,这对他们没有帮助——除非他们也在深夜编码。答案在我的代码中。我输入了一个带有两个 t 的参数字符串 lastname。是的,它就是那么简单和愚蠢,我看了一个小时都没有意识到。今天早上才看到这个问题,它像 480 pt 中的两个 t 一样突出。字体。
使用属性路由,实际上所需要的只是参数名称与 URI 变量名称相匹配。可以创建一个模型并将 [FromUri] 属性添加到参数,但在这种情况下没有必要。
因此,控制器可以简单地
[Route("alumniInfo")]
[HttpGet]
public IHttpActionResult GetAlumniInfo(string email, string firstName, string lastName)
{
return Ok("Success" + lastName);
}
我正在尝试从我的 angular 控制器调用 Web api 控制器上的 httpGet,但我无法执行任何操作来传递多个参数。
我试过将参数添加到路由中,(route/{email}/{firstName}/{lastName}
.
我可以验证 angular 方法 getCurrentAlumniInfo
正在被调用并且正在尝试路由到控制器。我使用了 Postman,具有以下 URI,
"localHost: PortNumber/api/alumni/currentAlumniInfo?Email=flintrock&FirstName=Fredf&LastName=Flintstone"
这是相关的片段。一、WebApiConfig使用属性路由:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
}
}
下一个我的 api 控制器
[RoutePrefix("api/Alumni")]
public class AlumniController : ApiController
{
private readonly AlumniRepository _repository;
private readonly AuthRepository _authRepository;
public AlumniController()
{
_repository = new AlumniRepository();
_authRepository=new AuthRepository();
}
[Route("alumniInfo")]
[HttpGet]
public IHttpActionResult GetAlumniInfo([FromUri]string email,string firstName, string lasttName)
{
return Ok("Success" + lasttName);
}
}
}
最后,angular(第 1 节)
var getCurrentAlumniInfo = function() {
var alumniData = alumniModel.buildAlumniMatchData();
var deferred = $q.defer();
//string email, string lastName,string middleName, string firstName
$http.get(serviceBase + 'api/alumni/alumniInfo',
{
params: {
Email: encodeURIComponent(alumniData.email),
FirstName: alumniData.firstName,
//MiddleName: alumniData.middleName,
LastName: alumniData.lastName
}
})
.then(function(response) {
deferred.resolve(response);
})
.catch(function(response) {
alert(response.statusCode + " error: " + response.status);
deferred.reject(response);
});
return deferred.promise;
};
为了它的价值,我使用的是框架的 v. 4.5.2 和 Visual Studio 2015。
感谢任何帮助。
要么将 get 方法更改为 post 并将参数作为模型传递,以便您可以接收模型作为 API 的参数。
服务
$http.post(serviceBase + 'api/alumni/alumniInfo',
{
params: {
Email: encodeURIComponent(alumniData.email),
FirstName: alumniData.firstName,
//MiddleName: alumniData.middleName,
LastName: alumniData.lastName
}
})
.then(function(response) {
...
})
.catch(function(response) {
...
});
型号
public class RecieveModel
{
public string Email {get;set;}
public string FirstName {get;set;}
public string LastName{get;set;}
}
API
[Route("alumniInfo")]
[HttpPost]
public HttpResponseMessage GetAlumniInfo(ReceiveModel model)
{
return Request.CreateResponse(HttpStatusCode.OK);
}
或
更改路由配置 defaults: new { id = RouteParameter.Optional ,id1 = RouteParameter.Optional,id2 = RouteParameter.Optional}
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}/{id1}/{id2}",
defaults: new { id = RouteParameter.Optional ,id1 = RouteParameter.Optional,id2 = RouteParameter.Optional});
万一其他人来到这里寻求解决问题,这对他们没有帮助——除非他们也在深夜编码。答案在我的代码中。我输入了一个带有两个 t 的参数字符串 lastname。是的,它就是那么简单和愚蠢,我看了一个小时都没有意识到。今天早上才看到这个问题,它像 480 pt 中的两个 t 一样突出。字体。 使用属性路由,实际上所需要的只是参数名称与 URI 变量名称相匹配。可以创建一个模型并将 [FromUri] 属性添加到参数,但在这种情况下没有必要。
因此,控制器可以简单地
[Route("alumniInfo")]
[HttpGet]
public IHttpActionResult GetAlumniInfo(string email, string firstName, string lastName)
{
return Ok("Success" + lastName);
}