Fehler: Request-Header-Feld Content-Type ist von Access-Control-Allow-Headers nicht erlaubt
Erstellte ich eine mvc4 web-api-Projekt mit vS2012. Ich benutzte die folgenden tutorial, um zu lösen das Cross-Origin Resource Sharing, "http://blogs.msdn.com/b/carlosfigueira/archive/2012/07/02/cors-support-in-asp-net-web-api-rc-version.aspx". Es arbeitet erfolgreich, und ich post-Daten aus client-server erfolgreich.
Nach, dass für die Umsetzung Autherization in meinem Projekt, habe ich das folgende tutorial zu implementieren, OAuth2, "http://community.codesmithtools.com/CodeSmith_Community/b/tdupont/archive/2011/03/18/oauth-2-0-for-mvc-two-legged-implementation.aspx". Dies wird helfen mir immer RequestToken auf der client-Seite.
Aber wenn ich die post-Daten von client-Seite, ich habe den Fehler,
"XMLHttpRequest-Objekt kann nicht geladen werden: http://. Anfrage-header-Feld Content-Type ist nicht erlaubt, Access-Control-Allow-Headers."
Meine client-Seite code Aussehen,
function PostLogin() {
var Emp = {};
Emp.UserName = $("#txtUserName").val();
var pass = $("#txtPassword").val();
var hash = $.sha1(RequestToken + pass);
$('#txtPassword').val(hash);
Emp.Password= hash;
Emp.RequestToken=RequestToken;
var createurl = "http://localhost:54/api/Login";
$.ajax({
type: "POST",
url: createurl,
contentType: "application/json; charset=utf-8",
data: JSON.stringify(Emp),
statusCode: {
200: function () {
$("#txtmsg").val("done");
toastr.success('Success.', '');
}
},
error:
function (res) {
toastr.error('Error.', 'sorry either your username of password was incorrect.');
}
});
};
Meine api-controller Aussehen,
[AllowAnonymous]
[HttpPost]
public LoginModelOAuth PostLogin([FromBody]LoginModelOAuth model)
{
var accessResponse = OAuthServiceBase.Instance.AccessToken(model.RequestToken, "User", model.Username, model.Password, model.RememberMe);
if (!accessResponse.Success)
{
OAuthServiceBase.Instance.UnauthorizeToken(model.RequestToken);
var requestResponse = OAuthServiceBase.Instance.RequestToken();
model.ErrorMessage = "Invalid Credentials";
return model;
}
else
{
//to do return accessResponse
return model;
}
}
Meine webconfig - Datei Aussehen,
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<section name="oauth" type="MillionNodes.Configuration.OAuthSection, MillionNodes, Version=1.0.0.0, Culture=neutral"/>
<sectionGroup name="dotNetOpenAuth" type="DotNetOpenAuth.Configuration.DotNetOpenAuthSection, DotNetOpenAuth.Core">
<section name="messaging" type="DotNetOpenAuth.Configuration.MessagingElement, DotNetOpenAuth.Core" requirePermission="false" allowLocation="true" />
<section name="reporting" type="DotNetOpenAuth.Configuration.ReportingElement, DotNetOpenAuth.Core" requirePermission="false" allowLocation="true" />
</sectionGroup>
</configSections>
<oauth defaultProvider="DemoProvider" defaultService="DemoService">
<providers>
<add name="DemoProvider" type="MillionNodes.OAuth.DemoProvider, MillionNodes" />
</providers>
<services>
<add name="DemoService" type="MillionNodes.OAuth.DemoService, MillionNodes" />
</services>
</oauth>
<system.web>
<httpModules>
<add name="OAuthAuthentication" type="MillionNodes.Module.OAuthAuthenticationModule, MillionNodes, Version=1.0.0.0, Culture=neutral"/>
</httpModules>
<compilation debug="true" targetFramework="4.0" />
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<pages>
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
</namespaces>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules>
<add name="OAuthAuthentication" type="MillionNodes.Module.OAuthAuthenticationModule, MillionNodes, Version=1.0.0.0, Culture=neutral" preCondition="" />
</modules>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
<dotNetOpenAuth>
<messaging>
<untrustedWebRequest>
<whitelistHosts>
<!-- Uncomment to enable communication with localhost (should generally not activate in production!) -->
<!--<add name="localhost" />-->
</whitelistHosts>
</untrustedWebRequest>
</messaging>
<!-- Allow DotNetOpenAuth to publish usage statistics to library authors to improve the library. -->
<reporting enabled="true" />
InformationsquelleAutor der Frage Kishore | 2012-09-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie schon angedeutet, durch diesen Beitrag Fehler in chrome: der Content-Typ ist nicht erlaubt, Access-Control-Allow-Header fügen Sie einfach die zusätzliche Kopfzeile Ihrer Website.config wie so...
InformationsquelleAutor der Antwort Mark Jones
Ist es wahrscheinlich aufgrund einer cross-origin-Anfrageaber kann es nicht sein. Für mich, ich hatte Debuggen von API und die
Access-Control-Allow-Origin
zu*
ist, aber es scheint, dass die neuesten Versionen von Chrome, erfordern einen zusätzlichen header. Versuchen Sie vor dem folgenden in die Datei, wenn Sie mit PHP:Stellen Sie sicher, dass Sie nicht bereits verwendet
header
in einer anderen Datei, oder Sie bekommen einen fiesen Fehler. Sehen die docs für mehr.InformationsquelleAutor der Antwort user1429980
Ich weiß, es ist ein altes Thema, ich arbeitete mit den oben beantworten und hinzufügen musste:
Also mein header sieht wie folgt aus:
Und das problem war behoben.
InformationsquelleAutor der Antwort DannyG
Für Nginx, das einzige, was für mich gearbeitet wurde das hinzufügen dieser header:
Zusammen mit der Access-Control-Allow-Origin-header:
Dann reloaded die nginx config und es hat Super geklappt. Kredit https://gist.github.com/algal/5480916.
InformationsquelleAutor der Antwort Nick Woodhams