我有一个接受 2 个字符串参数的 asp.net web api 控制器操作(RESTful)。这样的参数可以为空。Web api 操作从 asp.net Razor 视图页面中的 AngularJS 代码(客户端 Javascript)中使用。
该 web api 操作的问题是案例 4(见下文)永远不会被击中。具体来说,当 paramter1 以空字符串传递,而 paramter2 以非空字符串传递时,情况 4 应该运行。但是,在针对这种情况运行并使用调试器时,我发现paramter1 的值绑定到 parameter2 的值,并且 parameter2 的值变为 null 或 empty。因此,该 web 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
})
}
};
});