2

ASP.NET Web API を使用しているときに、リクエストのコンテンツ タイプが application/xml か application/json かを確認するにはどうすればよいですか? ASP.NET Web API のコンテンツ ネゴシエーションについては知っていますが、データベースから XML 形式でのみデータを取得するため、うまくいきません。したがって、リクエストのコンテンツ タイプを確認できれば、リクエストのコンテンツ タイプが XML の場合は XML を json に変換でき、それ以外の場合は単純に XML を返します。

前もって感謝します。

4

2 に答える 2

0

Acceptヘッダーを調べて、JSONとXMLのどちらが返されるかを確認します。そのためには、コンテキストのリクエストヘッダーを調べる必要があります。これを行うには、少なくとも2つの方法があります。

オプション#1-APIコントローラーメソッドの内部に実装する

APIメソッド内でこれを行うには、次の内部を調べます。

this.ControllerContext.Request.Headers.Accept

オプション#2-ActionFilterAttributeを使用する

これにより、クライアントが何を取り戻したいのかを調べることもできます。

public class HttpUserContextFilterAttribute : ActionFilterAttribute
{        
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
         //Here is where you can inspect the headers
         //e.g. look into actionContext.Request.Headers.Accept
于 2012-10-16T17:12:01.277 に答える
0

新しい ApiController クラスを作成し、apiController から継承して、JsonContent アクションを追加します。

public class ApiCustomController: System.Web.Http.ApiController {
    public class JsonContent : ActionMethodSelectorAttribute {

        public override bool IsValidForRequest(
            ControllerContext controllerContext
            , System.Reflection.MethodInfo methodInfo) {

            var Request = controllerContext.HttpContext.Request;
            string requestedWith = Request.ServerVariables["HTTP_X_REQUESTED_WITH"] ?? string.Empty;
            return string.Compare(requestedWith, "XMLHttpRequest", true) == 0
                && Request.ContentType.ToLower().Contains("application/json");
        }
    }

}

次に、コントローラーで、カスタム コントローラー クラス "ApiCustomController" から継承し、ActionMethodSelectorAttribute "JsonContent" を使用します。

public class IngredientsController : App_a_matic.Controllers.ApiController {
    // GET api/values
    [HttpGet]
    [JsonContent]
    public IEnumerable<string> Get() {
        return new string[] { "value1", "value2" };
    }
 } 

これは、次のように「contentType: 'application/json'」で送信しています。

    $(function () {
        $.ajax({
            url: 'api/Products/Ingredients'
            , contentType: 'application/json'
            , dataType: 'json'
            , type: 'GET'
            , success: function (result) {
                console.log(result);
            }
        });
    })

getJson を使用するだけではありません。

于 2013-03-27T17:27:00.640 に答える