Web API 路由配置未由具有多个参数的 angularjs 触发
Web API Route config not firing by angularjs with multiple parameters
请检查我的 WebApiConfig、API 控制器和 angular 服务。第一条路线工作正常,但第二条和第三条路线未通过 angularjs 调用。虽然 web api 路由没问题。
--WebApiConfig
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Formatters.Remove(config.Formatters.XmlFormatter);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{param}",
defaults: new { param = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "Api2",
routeTemplate: "api/{controller}/{action}/{param1}/{param2}",
defaults: new { param1 = RouteParameter.Optional, param2 = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "Api3",
routeTemplate: "api/{controller}/{action}/{param1}/{param2}/{param3}",
defaults: new { param1 = RouteParameter.Optional, param2 = RouteParameter.Optional, param3 = RouteParameter.Optional }
);
}
}
--网络API控制器
[HttpPost]
public IHttpActionResult InsertAcademicInfo(AcademicInformation[] param1, AcademicResult[] param2)
{
return Ok(_academic.InsertAcademicInformation(param1, param2).Data);
}
--Angular服务
mainApp.factory('AcademicServices', ['$http', '$rootScope', function ($http, $rootScope) {
return {
Save: function (academic, results) {
return $http({
url: '/Api/ApiAcademic/InsertAcademicInfo',
method: 'POST',
data: { param1: academic, param2: results },
async: false
});
},
};
}]);
这不是 post
在 Web API 中的工作方式。您发送的内容与您期望的不符。如果你想通过消息体发送数据,你需要发送一个对象,这个对象可能很复杂。这是您当前通过 angular/javascript 调用所做的,而不是您在 Web api 方法中所期望的。像下面这样更改您的网站 api 以完成此操作。
此外,您确实应该使用路由属性,而不是尝试创建一个单一的路由 table 来容纳所有控制器中的所有路由。使用 RouteAttribute
和 RoutePrefixAttribute
。此外,您不需要在下面的方法中使用任何参数,因为您是使用请求消息正文而不是 URI 发送数据。
AcademicInfoModel.cs
public class AcademicInfoModel {
public AcademicInformation[] param1 {get;set;}
public AcademicResult[] param2 {get;set;}
}
ApiAcademicController.cs
[RoutePrefix("api/ApiAcademic")]
public class ApiAcademicController : ApiController
{
[HttpPost]
[Route("InsertAcademicInfo")]
public IHttpActionResult InsertAcademicInfo(AcademicInfoModel model)
{
return Ok(_academic.InsertAcademicInformation(model.param1, model.param2).Data);
}
}
请检查我的 WebApiConfig、API 控制器和 angular 服务。第一条路线工作正常,但第二条和第三条路线未通过 angularjs 调用。虽然 web api 路由没问题。
--WebApiConfig
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Formatters.Remove(config.Formatters.XmlFormatter);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{param}",
defaults: new { param = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "Api2",
routeTemplate: "api/{controller}/{action}/{param1}/{param2}",
defaults: new { param1 = RouteParameter.Optional, param2 = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "Api3",
routeTemplate: "api/{controller}/{action}/{param1}/{param2}/{param3}",
defaults: new { param1 = RouteParameter.Optional, param2 = RouteParameter.Optional, param3 = RouteParameter.Optional }
);
}
}
--网络API控制器
[HttpPost]
public IHttpActionResult InsertAcademicInfo(AcademicInformation[] param1, AcademicResult[] param2)
{
return Ok(_academic.InsertAcademicInformation(param1, param2).Data);
}
--Angular服务
mainApp.factory('AcademicServices', ['$http', '$rootScope', function ($http, $rootScope) {
return {
Save: function (academic, results) {
return $http({
url: '/Api/ApiAcademic/InsertAcademicInfo',
method: 'POST',
data: { param1: academic, param2: results },
async: false
});
},
};
}]);
这不是 post
在 Web API 中的工作方式。您发送的内容与您期望的不符。如果你想通过消息体发送数据,你需要发送一个对象,这个对象可能很复杂。这是您当前通过 angular/javascript 调用所做的,而不是您在 Web api 方法中所期望的。像下面这样更改您的网站 api 以完成此操作。
此外,您确实应该使用路由属性,而不是尝试创建一个单一的路由 table 来容纳所有控制器中的所有路由。使用 RouteAttribute
和 RoutePrefixAttribute
。此外,您不需要在下面的方法中使用任何参数,因为您是使用请求消息正文而不是 URI 发送数据。
AcademicInfoModel.cs
public class AcademicInfoModel {
public AcademicInformation[] param1 {get;set;}
public AcademicResult[] param2 {get;set;}
}
ApiAcademicController.cs
[RoutePrefix("api/ApiAcademic")]
public class ApiAcademicController : ApiController
{
[HttpPost]
[Route("InsertAcademicInfo")]
public IHttpActionResult InsertAcademicInfo(AcademicInfoModel model)
{
return Ok(_academic.InsertAcademicInformation(model.param1, model.param2).Data);
}
}