Почему Request.ContentType всегда пуст в моих запросах? - PullRequest
0 голосов
/ 26 октября 2009

У меня есть базовый класс контроллера, который пытается взглянуть на Request.ContentType, чтобы узнать, является ли это запросом json или обычным запросом HTML. Затем базовый контроллер устанавливает простое перечисление для базового класса, и соответствующий контроллер возвращает правильный тип. Однако Request.ContentType всегда является пустой строкой. почему это?

мой базовый контроллер:

namespace PAW.Controllers
{
    public class BaseController : Controller
    {
        public ResponseFormat ResponseFormat { get; private set; }
        public User CurrentUser { get; private set; }

        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);

            Culture.SetCulture();

            if (this.Request.ContentType.ToLower() == "application/json")
                this.ResponseFormat = ResponseFormat.Json;
            else
                this.ResponseFormat = ResponseFormat.Html;

            Response.Cache.SetCacheability(HttpCacheability.NoCache);

            //setup user object
            this.CurrentUser = WebUser.CurrentUser;
            ViewData["CurrentUser"] = WebUser.CurrentUser;
        }
    }

    public enum ResponseFormat
    {
        Html,
        Json,
        Xml
    }
}

мой JQuery:

$.ajax({
    type: "GET",
    contentType: "application/json; charset=utf-8",
    url: "/Vendor/Details/" + newid,
    data: "{}",
    dataType: "json",
    success: function(data) { ShowVendor(data); },
    error: function(req, status, err) { ShowError("Sorry, an error occured (Vendor callback failed).  Please try agian later."); }
});

Ответы [ 3 ]

2 голосов
/ 29 октября 2009

Похоже, вы пытаетесь использовать заголовок ContentType, чтобы определить, какой тип ответа нужно вернуть. Это не то, для чего это. Вместо этого вы должны использовать заголовок Accepts, который сообщает серверу, какие типы контента вы принимаете.

1 голос
/ 26 октября 2009

Попробуйте использовать

 $.ajax({
            type: "GET",
            contentType: "application/json; charset=utf-8",
            url: "/Vendor/Details/" + newid,
            beforeSend: function(xhr) {
                xhr.setRequestHeader("Content-type",
                     "application/json; charset=utf-8");
            },
            data: "{}",
            dataType: "json",
            success: function(data) { alert(data); },
            error: function(req, status, err) { ShowError("Sorry, an error occured (Vendor callback failed).  Please try agian later."); }
        });

а-ля - http://encosia.com/2008/06/05/3-mistakes-to-avoid-when-using-jquery-with-aspnet-ajax/

0 голосов
/ 26 октября 2009

Заголовок "content-type" ничего не делает, когда ваш метод "GET".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...