ASP.NET MVC 3 JSONP: ¿Funciona esto con JsonValueProviderFactory?

Phil Haack tiene una excelenteentrada en el blog sobre cómo usar JSON, enlace de datos y validación de datos.

Ingrese la "restricción de seguridad de la misma política de origen del navegador". y JSONP donde usa $ .getJSON () para recuperar el contenido.

¿Hay una forma integrada de MVC 3 para hacer esto, o debo seguir los consejos depublicaciones como esta? ¿Puedes publicar contenido? Pregunto porque mi colega implementó un JsonPfilterAttribute entre otras cosas para que esto funcione. Obviamente, se prefiere evitar eso si ya existe algo en MVC 3.

Editar:

Resumen: todo funciona con la excepción de acceder a unPOST variable, es decir, cómo accedo alPOST variable en el contexto? (comentario que lo marca en la última sección del código)

Elegí usar este formato para llamar al servidor:

$.ajax({
    type: "GET",
    url: "GetMyDataJSONP",
    data: {},
    contentType: "application/json; charset=utf-8",
    dataType: "jsonp",
    jsonpCallback: "randomFunctionName"
});

Lo que produce esta respuesta:

randomFunctionName([{"firstField":"111","secondField":"222"}]);

Y todo esto funciona muy bien si uso unGET. Sin embargo, todavía no puedo hacer que esto funcione como unPOST. Aquí está el código original publicado por Nathan Bridgewateraquí. Esta línea no encuentra los datos POST:

context.HttpContext.Request["callback"];

O debería estar accediendoForm de alguna manera, o los validadores de datos MVC están eliminando las variables POST.

Cómo deberíacontext.HttpContext.Request["callback"]; ser escrito para acceder a laPOST variable o MVC elimina estos valores por alguna razón?

namespace System.Web.Mvc
{   public class JsonpResult : ActionResult
    {   public JsonpResult() {}

        public Encoding ContentEncoding { get; set; }
        public string ContentType { get; set; }
        public object Data { get; set; }
        public string JsonCallback { get; set; }

        public override void ExecuteResult(ControllerContext context)
        {   if (context == null)
               throw new ArgumentNullException("context");

            this.JsonCallback = context.HttpContext.Request["jsoncallback"];

            // This is the line I need to alter to find the form variable:

            if (string.IsNullOrEmpty(this.JsonCallback))
                this.JsonCallback = context.HttpContext.Request["callback"];

            if (string.IsNullOrEmpty(this.JsonCallback))
                throw new ArgumentNullException(
                    "JsonCallback required for JSONP response.");

            HttpResponseBase response = context.HttpContext.Response;

            if (!String.IsNullOrEmpty(ContentType))
               response.ContentType = ContentType;
            else
               response.ContentType = "application/json; charset=utf-8";

            if (ContentEncoding != null)
                response.ContentEncoding = ContentEncoding;

            if (Data != null)
            {   JavaScriptSerializer serializer = new JavaScriptSerializer();
                response.Write(string.Format("{0}({1});", this.JsonCallback,
                    serializer.Serialize(Data)));
    }   }   }

    //extension methods for the controller to allow jsonp.
    public static class ContollerExtensions
    {
        public static JsonpResult Jsonp(this Controller controller, 
               object data)
        {
            JsonpResult result = new JsonpResult();
            result.Data = data;
            result.ExecuteResult(controller.ControllerContext);
            return result;
        }
    }
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta