我有一个asp.net web api控制器动作(RESTful),它接受2个字符串参数。这样的参数可以是空的。在asp.net Razor视图页面中使用AngularJS代码(客户端Javascript)消耗web api操作。
Web api操作的问题是案例4(见下文)永远不会被击中。详细地说,当paramter1以空字符串传递时,应该运行case 4,并且使用非空字符串传递paramter2。但是,在运行这种情况并使用调试器时,我发现 paramter1的值绑定到parameter2的值,而parameter2的值变为null或为空。因此,与该网络API动作存在错误的数据绑定,我不知道如何解决它。请帮忙。谢谢。
Web API控制器操作如下所示:
[HttpGet]
[AllowAnonymous]
public HttpResponseMessage GetProductByParamter1AndParameter2(string paramter1, string paramter2)
{
if (string.IsNullOrWhiteSpace(paramter1) && string.IsNullOrWhiteSpace(paramter2))
{
// case 1: do something 1 ...
}
else if (!string.IsNullOrWhiteSpace(paramter1) && !string.IsNullOrWhiteSpace(paramter2))
{
// case 2: do something 2 ...
}
else
{
if (!string.IsNullOrWhiteSpace(paramter1) && string.IsNullOrWhiteSpace(paramter2))
{
// case 3: do something 3 ...
}
else // when paramter1 is empty and paramter2 is not empty
{
// case 4: do something 4 ... but this is never hit
}
}
该Web API控制器操作的自定义路由如下所示:
config.Routes.MapHttpRoute(
name: "ProductApi_GetProductByParamter1AndParameter2",
routeTemplate: "api/ProductApi/GetProductByParamter1AndParameter2/{parameter1}/{parameter2}",
defaults: new
{
controller = "ProductApi",
action = "GetProductByParamter1AndParameter2",
parameter1 = "",
parameter2 = ""
}
);
在cshtml视图页面中,在客户端使用AngularJS(Javascript代码)来使用该Web API,我编写的代码如下:
myApp.factory('ListProductFactory', function ($http, $q) {
return {
getProducts: function (par1, par2) {
var url = _baseUrl + '/ProductApi/GetProductByParamter1AndParameter2/' + par1 + '/' + par2;
return $http({
method: 'GET',
url: url
})
}
};
});
答案 0 :(得分:0)
在控制器上设置' routeTemplate'作为api/ProductApi/**GetSourceColumns**/{parameter1}/{parameter2}
,它应该是操作GetProductByParamter1AndParameter2
的名称。
如果定义为:/ProductApi/GetProductByParamter1AndParameter2/{parameter1}/{parameter2}
之类的网址仍然到达已定义的路线,那么甚至没有意义。
您可能已阅读过这些内容,但如果您还没有阅读,请查看解释Web API主要功能的链接
模型验证:http://www.asp.net/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web-api
路由和操作选择:http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api
答案 1 :(得分:0)
要解决这个问题,我使用查询字符串方法而不是段(/)方法:
var url = _baseUrl + '/ProductApi/GetProductByParamter1AndParameter2?parameter1=' + par1 + '¶meter2=' + par2;
我花了10天时间为自己找出答案。这很痛苦。