ত্রুটি: শিরোনাম ক্ষেত্রের অনুরোধ করুন সামগ্রী-প্রকার অ্যাক্সেস-নিয়ন্ত্রণ-মঞ্জুরি-শিরোনাম দ্বারা অনুমোদিত নয়


102

আমি vS2012 ব্যবহার করে একটি এমভিসি 4 ওয়েব এপিআই প্রকল্প তৈরি করেছি। আমি ক্রস-অরিজিন রিসোর্স ভাগ করে নেওয়ার জন্য নীচের টিউটোরিয়ালটি ব্যবহার করেছি, "http://blogs.msdn.com/b/carlosfigueira/archive/2012/07/02/cors-support-in-asp-net-web-api- RC-version.aspx "। এটি সফলভাবে কাজ করছে এবং আমি ক্লায়েন্টের পক্ষ থেকে সার্ভারে সাফল্যের সাথে ডেটা পোস্ট করি।

এর পরে আমার প্রকল্পে প্রমাণীকরণ বাস্তবায়নের জন্য, আমি নীচের টিউটোরিয়ালটি OAuth2 বাস্তবায়নের জন্য ব্যবহার করেছি, "http://commune.codesmithtools.com/CodeSmith_Commune/b/tdupont/archive/2011/03/18/oauth-2-0- জন্য -mvc-দু-পা-implementation.aspx "। এটি ক্লায়েন্টের পক্ষে অনুরোধটোকেন পাওয়ার জন্য আমাকে সহায়তা করছে।

তবে যখন আমি ক্লায়েন্টের পক্ষ থেকে ডেটা পোস্ট করি তখন আমি ত্রুটি পেয়েছি, "এক্সএমএলএইচটিপিআরকুয়েস্ট http: // লোড করতে পারে না।

আমার ক্লায়েন্টের সাইড কোডটি দেখতে দেখতে,

 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.');            
                }
        });
    };

আমার এপিআই কন্ট্রোলার দেখতে দেখতে,

    [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;
        }

    } 

আমার ওয়েবকনফিগ ফাইলটি দেখতে দেখতে,

 <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" />


এই স্ট্যাকওভারফ্লো.com/ জিজ্ঞাসাগুলি / 5027705/… একবার দেখুন এবং আপনার ওয়েব কনফিগারেশনে আরও একটি বিধি যুক্ত করুন
মার্ক জোনস

হাই আপনি কি আপনার ব্রাউজার এবং স্থানীয় ফাইল সিস্টেম থেকে সরাসরি এই জেএসটি পরীক্ষা করছেন যেমন ফাইল: // ইউআরএল। ?? আর কোন ব্রাউজার থেকে?
মার্ক জোন্স

উত্তর:


170

ক্রোমের ত্রুটিযুক্ত এই পোস্টের দ্বারা : কন্টেন্ট-প্রকারের অ্যাক্সেস-নিয়ন্ত্রণ-মঞ্জুরি- শিরোনাম দ্বারা অনুমোদিত নয় কেবল আপনার ওয়েবকনফাইগের মতো অতিরিক্ত শিরোনাম যুক্ত করুন ...

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
  </customHeaders>
</httpProtocol>

উত্তর দেওয়ার জন্য ধন্যবাদ. এটি চেষ্টা করেও আমি ত্রুটি পেয়েছি, "এক্সএমএলএইচটিপিআরকুয়েস্ট লোকালহোস্ট: 54 / এপিআই / লগইন লোড করতে পারে না Access
কিশোর


এটি নিয়ে আমার এখনও ভাগ্য নেই, আমি এখানে বিস্তারিত পোস্ট করেছি: stackoverflow.com/questions/12437748/…
কিশোর

112

এটি সম্ভবত ক্রস-উত্স অনুরোধের কারণে , তবে এটি নাও হতে পারে। আমার জন্য, আমি একটি API ডিবাগ করছিলাম এবং এটিকে সেট করে Access-Control-Allow-Originদিয়েছিলাম *তবে Chrome এর সাম্প্রতিক সংস্করণগুলিতে অতিরিক্ত শিরোনামের প্রয়োজন রয়েছে বলে মনে হয়। আপনি যদি পিএইচপি ব্যবহার করে থাকেন তবে আপনার ফাইলটিতে নিম্নলিখিতটি প্রেন্ডিং করার চেষ্টা করুন:

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");

নিশ্চিত হয়ে নিন যে আপনি ইতিমধ্যে headerঅন্য কোনও ফাইলে ব্যবহার করেননি বা আপনি একটি বাজে ত্রুটি পাবেন। আরও জন্য ডক্স দেখুন।


3
নক্ষত্র কেন সব কিছু আবরণ করে না - -;
ব্যবহারকারী 2483724

3
@ ব্যবহারকারীর 2483724 কারণ তারাটি কোনও মূল ডোমেনকে অনুমতি দেয় তবে কোন অতিরিক্ত শিরোনাম অনুমোদিত তা তা নির্দিষ্ট করে না। এটি কেবল বলেছে, 'আপনি অন্য কোনও পৃষ্ঠা থেকে এই স্ক্রিপ্টটি কল করতে সক্ষম হয়েছেন'
গ্রেট ক্লোবনের

18

আমি জানি এটি একটি পুরানো থ্রেড যা আমি উপরের উত্তরের সাথে কাজ করেছি এবং যুক্ত করতে হয়েছিল:

header('Access-Control-Allow-Methods: GET, POST, PUT');

সুতরাং আমার শিরোনামটি দেখতে দেখতে:

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
header('Access-Control-Allow-Methods: GET, POST, PUT');

এবং সমস্যা স্থির ছিল।


10

এনগিনেক্সের জন্য, আমার পক্ষে কাজ করা একমাত্র জিনিসটি এই শিরোনামটি যুক্ত করছিল:

add_header 'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,Keep-Alive,X-Requested-With,If-Modified-Since';

অ্যাক্সেস-নিয়ন্ত্রণ-মঞ্জুরি-উত্স শিরোনামের সাথে:

add_header 'Access-Control-Allow-Origin' '*';

তারপরে nginx কনফিগারটি পুনরায় লোড করুন এবং এটি দুর্দান্ত কাজ করেছে। ক্রেডিট https://gist.github.com/algal/5480916

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.