9

Ten problem rozpoczął się od IE9, gdzie dla żądań POST musi być text/plain, a application/json nie będzie działać.text/plain Media Typ nie jest akceptowany dla WebApi v2

Dodałem moonscript i przystąpiłem do korzystania z contentType: text/plain. Dodałem także niestandardowy typ nośnika do API, jak pokazano na licznych formach poniżej:

I dodaje wstawiania typu text/plain mediów do WebApiConfig

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); 
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; 
config.Formatters.JsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented; 

// allows 'text/plain' as a supported media type 
config.Formatters.Add(new TextMediaTypeFormatter()); 

Jednak w przypadku publikowania w IE9 (przy użyciu emulacji) nadal otrzymuję numer 415 Unsupported Media Type

Key Value Response HTTP/1.1 415 Unsupported Media Type

$.ajax({ 
    type: "POST", 
    url: hope_forms.viivApiUrl + 'newsletter', 
    contentType: 'text/plain', 
    data: JSON.stringify(model), 
    success: function (data) { 
      ..... 
    }, 
    error: function (responseText) { 
      console.log(responseText) 
      modal.showModal('Something went wrong, please try again.'); 
    }      
}); 

Dodatek:

Oto pełnowartościowy WebApiConfig w przypadku, gdy coś jest nie w porządku:

var cors = new EnableCorsAttribute("*", "*", "*"); 
config.EnableCors(cors); 

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

// Uncomment the following line of code to enable query support for actions with an IQueryable or IQueryable<T> return type. 
// To avoid processing unexpected or malicious queries, use the validation settings on QueryableAttribute to validate incoming queries. 
// For more information, visit http://go.microsoft.com/fwlink/?LinkId=279712. 
//config.EnableQuerySupport(); 

config.EnableSystemDiagnosticsTracing(); 


//config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); 
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; 
config.Formatters.JsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented; 

// allows 'text/plain' as a supported media type 
config.Formatters.Add(new TextMediaTypeFormatter()); 

Ja również zmienił ajaxTransport xhr opakowanie używać to zamiast : https://github.com/gfdev/javascript-jquery-transport-xdr


Uwaga:

dzień dzisiejszy, 09/21, mam włączone wszystkie moje POST żądania GET, ale nadal chcieliby obejść, aby te typy z powrotem do POST.

+0

Spróbuj zmienić 'config.Formatters.JsonFormatter.SupportedMediaTypes.Add (nowa MediaTypeHeaderValue ("text/html"));' na 'config.Formatters.JsonFormatter.SupportedMediaTypes.Add (nowa MediaTypeHeaderValue ("text/plain")); ' –

+0

Klasa' TextMediaTypeFormatter' dodaje, że (która jest w (2) odsyłaczach, które zamieściłem z innych formularzy. –

+0

Zgadnij - ale po przeczytaniu obu artykułów nie mogę powód, dla którego należy dodać tekst/html do JsonFormatter Mam na myśli pierwszą linię, a nie dodanie TextMediaTypeFormatter . –

Odpowiedz

1

myślę, że napotkasz dziwne XDomainRequest problem, który pojawił się w 2014 roku według this MSDN blog

Uwaga: Począwszy od 2014 roku, XDomainRequest nie wydaje się, aby wysłać nagłówek Content-Type w ogóle. Nie jest dla mnie jasne, kiedy to się zmieniło.

Here's poprzednie pytanie na ten temat, które faktycznie odwołuje się do tego bloga.

Ta kopia jest również zapisywana w dokumentacji używanego rozszerzenia jQuery. W pliku Readme.md

XDomainRequest mają pewne ograniczenia:

  • nie ma nagłówka Content-Type w żądaniu

więc jeśli sprawdzeniu HttpContext.Request.ContentType założę to będzie/null pusty, w takim przypadku powinieneś być w stanie przypisać typ odpowiedzi "tekst/zwykły" i modlić się do bogów, które on działa.

Zasadniczo IE < 10 Obsługa XDomainRequest (a nawet samego XDomainRequest) to śmieci. Został on w zasadzie porzuciła do mojego zrozumienia i IE 10 implemented CORS support for XHR requests

+0

Sprawdzę to - dzięki za odpowiedź –