SORU
17 NİSAN 2009, Cuma


Dönen JSONP ASP.net MVC

Etki alanları arasında bazı JSON dönmek için sabırsızlanıyorum, ve bunu yapmak için daha JSONP saf JSON olduğunu anlıyorum. Sadece JSONResult türü uzanan düşünüyordum ve sonra da Jsonp bir yöntem uyguladı ki Denetleyicisi extendig yani ASP.net MVC kullanıyorum. Bu en iyi yolu hakkında gitmek ya da orada daha iyi olabilir yerleşik bir ActionResult?

Edit: devam ettim ve yaptım. Sadece referans iyiliği için yeni bir yol ekledi:

public class JsonpResult : System.Web.Mvc.JsonResult
    {
        public override void ExecuteResult(ControllerContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            HttpResponseBase response = context.HttpContext.Response;

            if (!String.IsNullOrEmpty(ContentType))
            {
                response.ContentType = ContentType;
            }
            else
            {
                response.ContentType = "application/javascript";
            }
            if (ContentEncoding != null)
            {
                response.ContentEncoding = ContentEncoding;
            }
            if (Data != null)
            {
                // The JavaScriptSerializer type was marked as obsolete prior to .NET Framework 3.5 SP1
#pragma warning disable 0618
                HttpRequestBase request = context.HttpContext.Request;

                JavaScriptSerializer serializer = new JavaScriptSerializer();
                response.Write(request.Params["jsoncallback"]   "("   serializer.Serialize(Data)   ")");
#pragma warning restore 0618
            }
        }
    }

ve ayrıca benim denetleyicileri bir üst sınıf için birkaç yöntem:

protected internal JsonpResult Jsonp(object data)
        {
            return Jsonp(data, null /* contentType */);
        }

        protected internal JsonpResult Jsonp(object data, string contentType)
        {
            return Jsonp(data, contentType, null);
        }

        protected internal virtual JsonpResult Jsonp(object data, string contentType, Encoding contentEncoding)
        {
            return new JsonpResult
            {
                Data = data,
                ContentType = contentType,
                ContentEncoding = contentEncoding
            };
        }

Bir cazibe gibi çalışır.

CEVAP
14 Aralık 2010, Salı


Jsonp ile benim kontrol sınıflara yerine() yöntemleri, bana dokunma bir daha temiz bir duygu olarak uzatma yöntemi yol gittim. Bu JsonpResult hakkında güzel bir şey, tam olarak aynı şekilde bir JsonResult test edebilirsiniz.

Yaptım:

public static class JsonResultExtensions
{
    public static JsonpResult ToJsonp(this JsonResult json)
    {
        return new JsonpResult { ContentEncoding = json.ContentEncoding, ContentType = json.ContentType, Data = json.Data, JsonRequestBehavior = json.JsonRequestBehavior};
    }
}

Tüm farklı Jsonp oluşturma hakkında endişelenmenize gerek yok bu şekilde() aşırı, sadece bir Jsonp bir JsonResult dönüştürmek.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Artorius FullPower

    Artorius Ful

    29 Temmuz 2007
  • DONFANTASTICKYPESS

    DONFANTASTIC

    1 Temmuz 2007
  • Crossover

    Crossover

    18 HAZİRAN 2007