Erreur :Demande de champ d'en-tête Content-Type n'est pas autorisé par Access-Control-Allow-en-Têtes
J'ai créé un mvc4 api web du projet à l'aide de vS2012. J'ai utilisé le tutoriel suivant pour résoudre le Cross-Origin Resource sharing, "http://blogs.msdn.com/b/carlosfigueira/archive/2012/07/02/cors-support-in-asp-net-web-api-rc-version.aspx". Il collabore avec succès, et j'affiche les données de client côté serveur avec succès.
Après que, pour la mise en œuvre de Autherization dans mon projet, j'ai utilisé le tutoriel suivant pour mettre en œuvre OAuth2, "http://community.codesmithtools.com/CodeSmith_Community/b/tdupont/archive/2011/03/18/oauth-2-0-for-mvc-two-legged-implementation.aspx". C'est m'aider pour l'obtention de RequestToken sur le côté client.
Mais quand je poste des données à partir du côté client, j'ai obtenu l'erreur,
"XMLHttpRequest ne peut pas charger http://. Demande de champ d'en-tête Content-Type n'est pas autorisé par Access-Control-Allow-en-Têtes."
Mon côté client code ressemblent,
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.');
}
});
};
Mon api contrôleur ressembler,
[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;
}
}
Mon webconfig fichier ressemble,
<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" />
- Jetez un oeil à cette stackoverflow.com/questions/5027705/... et ajouter une autre règle de votre site web config
- Bonjour êtes-vous de tester ce js directement à partir de votre navigateur et de votre système de fichiers local, par exemple: file:// URL.?? Et à partir de quel navigateur?
Vous devez vous connecter pour publier un commentaire.
Comme signalé par ce post Erreur dans google chrome: Type de Contenu n'est pas autorisé par Access-Control-Allow-en-Têtes juste ajouter l'en-tête supplémentaire à votre site web.config comme si...
C'est probablement dû à un de la croix-origine de la demande, mais il peut ne pas l'être. Pour moi, j'avais été débogage d'une API et a défini les
Access-Control-Allow-Origin
à*
, mais il semble que les versions récentes de Chrome sont exigeant un en-tête supplémentaire. Essayez ajoutant les lignes suivantes à votre fichier si vous utilisez PHP:Assurez-vous que vous n'avez pas déjà utilisé
header
dans un autre fichier, ou vous obtiendrez une erreur méchante. Voir les docs pour plus d'.Je sais que c'est un vieux thread, j'ai travaillé avec la réponse ci-dessus et a dû ajouter:
Donc ma tête ressemble à:
Et le problème a été résolu.
Pour Nginx, la seule chose qui a fonctionné pour moi a été l'ajout de cet en-tête:
Avec le Access-Control-Allow-Origin-tête:
Puis rechargé la config nginx et il a très bien fonctionné. Crédit https://gist.github.com/algal/5480916.