This problem started off with IE9, where for POST
requests, the contentType
has to be text/plain
, and application/json
will not work.
I've added the moonscript and proceeded to use contentType: text/plain
. I've also added the custom media type to the api, as shown on numerous forms below:
- http://www.stormbase.net/2015/09/21/webapi-post-plaintext/
- how to post plain text to ASP.NET Web API endpoint?
And added the insertion of the text/plain
media type to the 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());
However, when posting in IE9 (using emulation), I am still receiving a 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.');
}
});
Addition:
Here's the full blown WebApiConfig
in the event that something is out of order:
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());
I also changed the ajaxTransport xhr
wrapper to use this instead:
https://github.com/gfdev/javascript-jquery-transport-xdr
Note:
As of today, 09/21, I've switched all my POST
requests to GET
, but I still would like a work-around to get these types back to POST
.
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
toconfig.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/plain"));
– GilletteTextMediaTypeFormatter
class adds that (which is in the (2) links that I posted from other forms. – BoethiusdataType: 'json'
or contentType:'application/json' and check your response in chrome advance rest tool i hope it help you – EpidaurusXDomainRequest
object is present or not (IE9), thecontentType
is switched fromjson
totext/plain
. Please note that in order toPOST
w/ IE9, thexhr
wrapper is needed. – Boethius