2

WEB API 呼び出しから JSON 結果を取得しようとしています。

私の WEP API メソッド:

[AcceptVerbs("GET", "POST")]
    public object GetTest()
    {
         rep = new ChatRepository();
        chatBoxCLS box = rep.Chatrequest(chatRequestLevel.Parent, null);

        System.Web.Mvc.JsonResult jsonResult = new System.Web.Mvc.JsonResult
        {
            Data = box,
            JsonRequestBehavior = System.Web.Mvc.JsonRequestBehavior.AllowGet
        };


        return jsonResult.Data;
    }

以下のように WebapiConfig.cs を変更して、常に JSON を返すようにしました。

 config.Routes.MapHttpRoute(
          name: "DefaultApi",
          routeTemplate: "api/{controller}/{action}/{id}",
          defaults: new { action = "get", id = RouteParameter.Optional }
          );

            var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
            config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);

以下は私のJquery ajax呼び出しです:

<script type='text/javascript'>

    $(document).ready(function () {

        $.ajax({
            type: 'GET',
            url: 'http://localhost:6606/api/values/GetTest',

            dataType: 'json',

            crossDomain: true,
            success: function (msg) {

                alert('success');

            },
            error: function (request, status, error) {

                alert('error');
            }
        });
    });

</script>

それは常にエラーアラートになります。WEB API からデータを受信しません。デバッグを試みたところ、リクエストが正常に WEB API メソッドにヒットし、JSON が返されることがわかりました。以下は、返される JSON データです。

{"listOfItems":[{"id":14,"description":"新しいテスト","display_number":1},{"id":4,"description":"運用中","display_number":2} ,{"id":3,"description":"sales","display_number":3},{"id":5,"description":"technical","display_number":4}],"reply": null,"history":null,"Initialhistory":null,"質問":"","chatids":null,"displayNum":null}

クライアント側で結果が得られないのはなぜですか?

4

1 に答える 1

3

応答ヘッダーに Access-Control-Allow-Origin を追加して問題を解決しました

public class CrossDomainActionFilter : ActionFilterAttribute
    {
        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            bool needCrossDomain = true;

            if (needCrossDomain)
            {
                actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");
            }

            base.OnActionExecuted(actionExecutedContext);
        }
    }


[AcceptVerbs("GET", "POST")]
[CrossDomainActionFilter]
    public object GetTest()
    {
         rep = new ChatRepository();
        chatBoxCLS box = rep.Chatrequest(chatRequestLevel.Parent, null);

        System.Web.Mvc.JsonResult jsonResult = new System.Web.Mvc.JsonResult
        {
            Data = box,
            JsonRequestBehavior = System.Web.Mvc.JsonRequestBehavior.AllowGet
        };


        return jsonResult.Data;
    }
于 2013-11-04T09:55:36.830 に答える