0

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
                })
            }
        };
    });
4

2 に答える 2