2 つの文字列パラメーターを受け入れる asp.net Web API コントローラー アクション (RESTful) があります。このようなパラメーターは空にすることができます。Web API アクションは、asp.net Razor ビュー ページで AngularJS コード (クライアント側 Javascript) から使用されます。
その Web API アクションの問題は、ケース 4 (以下を参照) がヒットしないことです。詳細には、ケース 4 は、paramter1 が空の文字列で渡され、paramter2 が空でない文字列で渡された場合に実行されるはずです。ただし、このケースで実行し、デバッガーを使用すると、paramter1 の値が parameter2 の値にバインドされ、paramter2 の値が 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
})
}
};
});