অ্যাঙ্গুলারজেএস ক্রস-অরিজিন রিসোর্সের জন্য একটি বিকল্প HTTP অনুরোধ সম্পাদন করে


264

আমি একটি ক্রস-অরিজিন রিসোর্সের সাথে যোগাযোগের জন্য অ্যাঙ্গুলারজেএস সেটআপ করার চেষ্টা করছি যেখানে আমার টেম্পলেট ফাইলগুলি সরবরাহ করে এমন সম্পদ হোস্টটি অন্য কোনও ডোমেনে থাকে এবং তাই এক্সএইচআর অনুরোধ করে যে কৌণিক সম্পাদন অবশ্যই ক্রস-ডোমেন হওয়া উচিত। এই কাজটি করার জন্য এইচটিটিপি অনুরোধের জন্য আমি আমার সার্ভারে উপযুক্ত সিওআরএস শিরোনাম যুক্ত করেছি, তবে এটি কাজ করছে বলে মনে হয় না। সমস্যাটি হ'ল আমি যখন আমার ব্রাউজারে HTTP অনুরোধগুলি পরীক্ষা করি (ক্রোম) তখন সম্পদ ফাইলে প্রেরিত অনুরোধটি একটি বিকল্প বিকল্প (এটি একটি জিইটি অনুরোধ হওয়া উচিত)।

আমি নিশ্চিত নই যে এটি অ্যাংুলারজেএস-এ কোনও বাগ বা আমার কোনও কনফিগার করার দরকার আছে কিনা। আমি এক্সএইচআর মোড়কটি যা বুঝি সেগুলি থেকে কোনও বিকল্প এইচটিটিপি অনুরোধ করতে পারে না তাই দেখে মনে হচ্ছে ব্রাউজারটি জিইটি অনুরোধ সম্পাদন করার আগে প্রথমে সম্পদটি ডাউনলোড করার "অনুমতিপ্রাপ্ত" কিনা তা বের করার চেষ্টা করছে। যদি এটি হয়, তবে আমারও কি সম্পদ হোস্টের সাথে সিওআরএস শিরোনাম (অ্যাক্সেস-কন্ট্রোল-অলজন-অরিজিন: http://asset.host ..। ) সেট করা দরকার ?

উত্তর:


226

বিকল্পগুলির অনুরোধটি কোনওভাবেই কোনও অ্যাঙ্গুলারজেএস বাগ নয়, ক্রস-অরিজিন রিসোর্স শেয়ারিং স্ট্যান্ডার্ড ম্যান্ডেটগুলি ব্রাউজারগুলি এটি আচরণ করে। দয়া করে এই দস্তাবেজটি দেখুন: https://developer.mozilla.org/en-US/docs/HTTP_access_control , যেখানে "ওভারভিউ" বিভাগে বলা হয়েছে:

ক্রস-অরিজিন রিসোর্স শেয়ারিং স্ট্যান্ডার্ডটি নতুন এইচটিটিপি শিরোনাম যুক্ত করে কাজ করে যা সার্ভারগুলিকে ওয়েব ব্রাউজার ব্যবহার করে সেই তথ্যটি পড়ার অনুমতিপ্রাপ্ত উত্সগুলির সেটটি বর্ণনা করতে দেয়। অতিরিক্তভাবে, এইচটিটিপি অনুরোধ পদ্ধতির জন্য যা ব্যবহারকারীর ডেটাগুলিতে পার্শ্ব-প্রতিক্রিয়া সৃষ্টি করতে পারে (বিশেষত; জিইটি ব্যতীত এইচটিটিপি পদ্ধতিগুলির জন্য, বা নির্দিষ্ট এমএমআই টাইপের সাথে পোষ্ট ব্যবহারের জন্য)। স্পেসিফিকেশন ম্যান্ডেট করে যে ব্রাউজারগুলি অনুরোধটিকে "প্রিফলাইট" করে, একটি HTTP বিকল্প বিকল্প অনুরোধ শিরোনাম সহ সার্ভার থেকে সমর্থিত পদ্ধতিগুলি চাওয়া, এবং তারপরে, সার্ভারের "অনুমোদনের" পরে, প্রকৃত অনুরোধটি প্রকৃত HTTP অনুরোধ পদ্ধতির মাধ্যমে প্রেরণ করে। "শংসাপত্রগুলি" (কুকিজ এবং এইচটিটিপি প্রমাণীকরণ ডেটা সহ) অনুরোধের সাথে প্রেরণ করা উচিত কিনা তা সার্ভারগুলি ক্লায়েন্টদেরও অবহিত করতে পারে।

জেনেরিক সমাধান সরবরাহ করা খুব কঠিন যে সমস্ত ডাব্লুডাব্লুডাব্লু সার্ভারের জন্য কাজ করবে কারণ সার্ভার নিজেই এবং এইচটিটিপি ক্রিয়াগুলির উপরে নির্ভর করে যা আপনি সমর্থন করতে চান তার উপর নির্ভর করে সেটআপটি পৃথক হবে। আমি আপনাকে এই দুর্দান্ত নিবন্ধটি পেতে উত্সাহিত করব ( http://www.html5rocks.com/en/tutorials/cors/ ) যা একটি সার্ভারের মাধ্যমে প্রেরণ করা দরকার তার সঠিক শিরোনাম সম্পর্কে আরও অনেক বিশদ রয়েছে।


23
@ formatko আপনি কী সমাধান করতে পেরেছেন তা কি বিশদভাবে বলতে পারেন? আমি একই সমস্যার মুখোমুখি হয়েছি যার দ্বারা কোনও AngularJS $resource পোষ্ট অনুরোধটি আমার ব্যাকএন্ড এক্সপ্রেসজেএস সার্ভারে একটি বিকল্প বিকল্প উত্পন্ন করছে (একই হোস্টে; তবে একটি ভিন্ন পোর্ট)।
dbau

6
সমস্ত ডাউন-ভোটারদের জন্য - সেখানে থাকা সমস্ত ওয়েব সার্ভারের জন্য সঠিক কনফিগারেশন সেটআপ সরবরাহ করা অসম্ভবের পরে - উত্তরটি এই ক্ষেত্রে 10 পৃষ্ঠা নিবে। পরিবর্তে আমি একটি নিবন্ধের সাথে লিঙ্ক করেছি যা আরও বিশদ সরবরাহ করে।
pkozlowski.opensource

5
আপনি ঠিক বলেছেন যে আপনি কোনও উত্তর লিখে দিতে পারবেন না - আপনার বিকল্পগুলির প্রতিক্রিয়াতে আপনাকে শিরোনাম যুক্ত করতে হবে যা ব্রাউজারের অনুরোধ করে এমন সমস্ত শিরোনামকে কভার করে, আমার ক্ষেত্রে, ক্রোম ব্যবহার করে এটি শিরোনামগুলি 'গ্রহণ' এবং 'x -requested-সঙ্গে। ক্রোমে, আমি নেটওয়ার্ক অনুরোধটি দেখে এবং ক্রোম কী জিজ্ঞাসা করছে তা দেখে আমার কী যুক্ত করতে হবে তা নির্ধারণ করেছি। আমি নোডেজ / এক্সপ্রেসগুলি ব্যাকড হিসাবে ব্যবহার করছি তাই আমি এমন একটি পরিষেবা তৈরি করেছি যা বিকল্পগুলির অনুরোধটির প্রতিক্রিয়া ফিরিয়ে দিয়েছে যা প্রয়োজনীয় সমস্ত শিরোনামকে আবৃত করে। -1 কারণ আমি এই উত্তরটি কী করতে হবে তা বোঝার জন্য ব্যবহার করতে পারি নি, এটি নিজেই বের করতে হয়েছিল।
এড সাইকস

2
আমি জানি এটি 2+ বছর পরে, কিন্তু ... ওপি একাধিকবার জিইটি অনুরোধকে বোঝায় (আমার দ্বারা যুক্ত হওয়া জোর): «[...] সম্পদ ফাইলে প্রেরিত অনুরোধটি একটি বিকল্পের অনুরোধ ( এটি জিইটি হওয়া উচিত) অনুরোধ )। » এবং «ব্রাউজারটি জিইটি অনুরোধটি সম্পাদন করার আগে প্রথমে সম্পদটি ডাউনলোড করার জন্য" অনুমোদিত "কিনা তা বের করার চেষ্টা করছে » কীভাবে এটি তখন অ্যাংুলারজেএস বাগ হতে পারে না? প্রিফলাইট অনুরোধগুলি জিইটি-র জন্য নিষিদ্ধ করা উচিত নয়?
পোলেটিক্স

4
@ প্লেটিক্স এমনকি জিইটি অনুরোধ ব্রাউজারে প্রাক-বিমানের অনুরোধ ট্রিগার করতে পারে যদি কাস্টম শিরোনাম ব্যবহার করা হয়। আমি যে নিবন্ধটি লিঙ্ক করেছি তাতে "না-সহজ-সরল অনুরোধগুলি" পরীক্ষা করুন: html5rocks.com/en/tutorials/cors/#toc-making-a-cors-request । আবারও এটি ব্রাউজারের মেকানিজম, অ্যাংুলারজেএস নয়।
pkozlowski.opensource

70

কৌণিক 1.2.0rc1 + এর জন্য আপনাকে একটি উত্সUllWhitelist যুক্ত করতে হবে।

1.2: রিলিজ সংস্করণ তারা একটি এস্পয়েস ফরজেগএক্সপ্যাক্স ফাংশন যুক্ত করেছে যাতে আপনার আর স্ট্রিংগুলি এড়াতে হবে না। আপনি সরাসরি ইউআরএল যোগ করতে পারেন

'http://sub*.assets.example.com/**' 

সাব ফোল্ডারগুলির জন্য ** যুক্ত করার বিষয়টি নিশ্চিত করুন। এখানে 1.2: http://jsbin.com/olavok/145/edit এর জন্য একটি কার্যকারী জেসবিন রয়েছে


1.2.0rc: আপনি যদি এখনও কোনও আরসি সংস্করণে থাকেন, তবে কৌনিক 1.2.0rc1 সমাধানটি দেখতে পাবেন:

.config(['$sceDelegateProvider', function($sceDelegateProvider) {
     $sceDelegateProvider.resourceUrlWhitelist(['self', /^https?:\/\/(cdn\.)?yourdomain.com/]);
 }])

এখানে একটি jsbin উদাহরণ যেখানে এটি 1.2.0rc1 এর জন্য কাজ করে: http://jsbin.com/olavok/144/edit


পূর্ববর্তী 1.2: পুরানো সংস্করণগুলির জন্য (রেফ http://better-inter.net/enabling-cors-in-angular-js/ ) আপনার কনফিগারেশনে আপনাকে নিম্নলিখিত 2 টি লাইন যুক্ত করতে হবে:

$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];

এখানে একটি জেসবিন উদাহরণ রয়েছে যেখানে এটি 1.2 পূর্ববর্তী সংস্করণগুলির জন্য কাজ করে: http://jsbin.com/olavok/11/edit


এটি আমার পক্ষে কাজ করেছে। নোডেজ / এক্সপ্রেস সহ সার্ভারের পক্ষে উপযুক্ত যাদুটি এখানে রয়েছে: gist.github.com/dirkk0/5967221
dirkk0

14
এটি কেবল জিইটি অনুরোধের জন্যই কাজ করে, ক্রস ডোমেনে পোস্টের অনুরোধের সমাধান খুঁজে পাওয়া যায় না।
Pnct

2
উপরের ব্যবহারকারীর সাথে এই উত্তরটি মিলিয়ে 2304582 উত্তর পোস্টের অনুরোধগুলির জন্য কাজ করা উচিত। আপনাকে আপনার সার্ভারকে বলতে হবে যে এটি পাঠানো বাহ্যিক সার্ভারের পোষ্ট অনুরোধগুলি গ্রহণ করুন
চার্লি মার্টিন

এটি দেখে মনে হচ্ছে না এটি নিজের নিজের মতো করে কাজ করবে ... সুতরাং এ -1। আপনার একই ইউআরএলে এমন কিছু দরকার যা একটি প্রাক-বিমান চেকের অংশ হিসাবে একটি বিকল্পগুলির অনুরোধের প্রতিক্রিয়া জানাবে। আপনি কেন ব্যাখ্যা করতে পারবেন কেন এটি কাজ করবে?
এড সাইকস

1
@ অ্যাডসাইকস, আমি উত্তরটি 1.2 এর জন্য আপডেট করেছি এবং একটি কার্যকারী জেসবিন উদাহরণ যুক্ত করেছি। আশা করি এটি আপনার জন্য সমাধান করা উচিত। নিশ্চিত হয়ে নিন যে আপনি "জেএস ​​সহ রান করুন" বোতামটি টিপছেন।
জেস্টার্ক

62

দ্রষ্টব্য: নিশ্চিত নয় যে এটি কৌনিকের সর্বশেষতম সংস্করণে কাজ করে।

মূল:

বিকল্পগুলির অনুরোধটি ওভাররাইড করাও সম্ভব (কেবলমাত্র Chrome এ পরীক্ষা করা হয়েছিল):

app.config(['$httpProvider', function ($httpProvider) {
  //Reset headers to avoid OPTIONS request (aka preflight)
  $httpProvider.defaults.headers.common = {};
  $httpProvider.defaults.headers.post = {};
  $httpProvider.defaults.headers.put = {};
  $httpProvider.defaults.headers.patch = {};
}]);

1
ক্রোম, এফএফ এবং আইই 10 দিয়ে আমার জন্য দুর্দান্ত কাজ করে IE 9 এবং নীচে উইন্ডোজ 7 বা এক্সপি মেশিনে স্থানীয়ভাবে পরীক্ষা করা উচিত।
ডোম

3
বিকল্পভাবে যে কোনও এটি বিশ্বব্যাপী নয় $ সংস্থানসমূহের পদ্ধতিতে সেট করতে পারে:$resource('http://yourserver/yourentity/:id', {}, {query: {method: 'GET'});
h7r

3
এর সাথে কি কোনও ধরা আছে? এটি এত সহজ বলে মনে হচ্ছে, এবং তবুও উত্তরটি এত সুতোতে এতটা নিচে? সম্পাদনা: মোটেও কাজ হয়নি।
সেবাস্তিয়ালসনো

এই কোডটি কোথায় যায়? app.js, controller.js বা ঠিক কোথায়।
মুরলিধর ফিচাদিয়া

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

34

আপনার পরিষেবাটি অবশ্যই OPTIONSএই জাতীয় শিরোনাম সহ একটি অনুরোধের উত্তর দিতে হবে :

Access-Control-Allow-Origin: [the same origin from the request]
Access-Control-Allow-Methods: GET, POST, PUT
Access-Control-Allow-Headers: [the same ACCESS-CONTROL-REQUEST-HEADERS from request]

এখানে একটি ভাল ডক: http://www.html5rocks.com/en/tutorials/cors/#toc-adding-cors-support-to-the-server


1
[অনুরোধ থেকে একই অ্যাক্সেস-কন্ট্রোল-রিকুয়েস্ট-শিরোনামদের] অংশটি বিশদ বর্ণনা করার জন্য, আমি অন্য উত্তরে যেমনটি উল্লেখ করেছি, আপনার ব্রাউজারটি যুক্ত হচ্ছে এমন বিকল্পগুলির অনুরোধটি আপনাকে দেখতে হবে। তারপরে, আপনি যে পরিষেবাটি তৈরি করছেন (বা ওয়েব সার্ভার) সেই শিরোনামগুলি যুক্ত করুন। এক্সপ্রেসগুলিতে যেমন দেখাচ্ছিল: ejs.options (' ', ফাংশন (অনুরোধ, প্রতিক্রিয়া) {প্রতিক্রিয়া.হেডার ('অ্যাক্সেস-কন্ট্রোল-অরিজিন-অনুমতি দিন', ' '); প্রতিক্রিয়া হেডারে ('অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-পদ্ধতিগুলি ',' GET, PUT, POST, DELETE '); প্রতিক্রিয়া.হেডার (' অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-শিরোনাম '),' সামগ্রী-প্রকার, অনুমোদন, গ্রহণ, এক্স-অনুরোধ-সহ '); প্রতিক্রিয়া.সেন্ড (); });
এড সাইকস

1
এড সাইকস মন্তব্যটি খুব সঠিক, সচেতন থাকুন যে অপশন প্রতিক্রিয়াতে পাঠানো শিরোনামগুলি এবং পোষ্টের প্রতিক্রিয়াতে প্রেরিত পাঠানোগুলি একই রকম হওয়া উচিত, উদাহরণস্বরূপ: অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-উত্স: * অ্যাক্সেস- এর মতো নয় নিয়ন্ত্রণ-অনুমতি দিন: * স্থানগুলির কারণে।
লুসিয়া

20

একই নথি বলে

সাধারণ অনুরোধগুলির বিপরীতে (উপরে আলোচনা করা হয়েছে) প্রকৃত অনুরোধটি প্রেরণে নিরাপদ কিনা তা নির্ধারণের জন্য, "পূর্বনির্ধারিত" অনুরোধগুলি প্রথমে অন্য ডোমেনের সংস্থানটিতে একটি HTTP বিকল্প বিকল্পের শিরোনাম প্রেরণ করে। ক্রস-সাইট অনুরোধগুলি এর মতো প্রাক-আলোকিত হয় যেহেতু তাদের ব্যবহারকারীর ডেটাতে অন্তর্ভুক্ত থাকতে পারে। বিশেষত, একটি অনুরোধ প্রাকফ্লাইট করা হয় যদি:

এটি জিইটি বা পোষ্ট ব্যতীত অন্য পদ্ধতি ব্যবহার করে। এছাড়াও, যদি POST অ্যাপ্লিকেশন / x-www-form-urlencoded, মাল্টিপার্ট / ফর্ম-ডেটা, বা পাঠ্য / প্লেইন ব্যতীত কোনও সামগ্রী-প্রকারের সাথে অনুরোধ ডেটা প্রেরণ করতে ব্যবহৃত হয়, যেমন যদি POST অনুরোধটি সার্ভারে একটি এক্সএমএল পেলোড প্রেরণ করে অ্যাপ্লিকেশন / এক্সএমএল বা পাঠ্য / এক্সএমএল ব্যবহার করে, তারপরে অনুরোধটি পূর্বনির্ধারিত।

এটি অনুরোধে কাস্টম শিরোলেখ সেট করে (যেমন অনুরোধটি শিরোনাম ব্যবহার করে যেমন এক্স-পিংগথার)

যখন মূল অনুরোধটি কোনও কাস্টম শিরোনামহীন সাথে না হয়, ব্রাউজারটি এখন বিকল্পগুলির জন্য অনুরোধ করা উচিত নয়। সমস্যাটি হ'ল এটি শিরোনাম এক্স-অনুরোধযুক্ত-যা বিকল্পগুলির অনুরোধটিকে জোর করে। এই শিরোনামটি কীভাবে সরানো যায় তার জন্য https://github.com/angular/angular.js/pull/1454 দেখুন



10

আপনি যদি নোডজেএস সার্ভার ব্যবহার করে থাকেন তবে আপনি এই লাইব্রেরিটি ব্যবহার করতে পারেন এটি আমার পক্ষে ভাল কাজ করেছে https://github.com/expressjs/cors

var express = require('express')
  , cors = require('cors')
  , app = express();

app.use(cors());

এবং আপনি একটি করতে পারেন পরে npm update


4

আমি এএসপি.এনইটি-তে এই সমস্যার সমাধান করার উপায় এখানে

  • প্রথমে আপনার মাইক্রোসফ্ট.অস্পনেট.ওয়েবএপি.সি.স.

  • তারপরে App_Start \ WebApiConfig.cs ফাইলটি সংশোধন করুন

    public static class WebApiConfig    
    {
       public static void Register(HttpConfiguration config)
       {
          config.EnableCors();
    
          ...
       }    
    }
  • আপনার নিয়ামক শ্রেণিতে এই বৈশিষ্ট্যটি যুক্ত করুন

    [EnableCors(origins: "*", headers: "*", methods: "*")]
    public class MyController : ApiController
    {  
        [AcceptVerbs("POST")]
        public IHttpActionResult Post([FromBody]YourDataType data)
        {
             ...
             return Ok(result);
        }
    }
  • আমি এইভাবে অ্যাকশনে জসনকে পাঠাতে সক্ষম হয়েছি

    $http({
            method: 'POST',
            data: JSON.stringify(data),
            url: 'actionurl',
            headers: {
                'Content-Type': 'application/json; charset=UTF-8'
            }
        }).then(...)

তথ্যসূত্র: এএসপি.নেট ওয়েব এপিআই 2 তে ক্রস-অরিজিন অনুরোধগুলি সক্ষম করা


2

কোনওভাবে আমি এটি পরিবর্তন করে ঠিক করেছি

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

প্রতি

<add name="Access-Control-Allow-Headers" 
     value="Origin, Content-Type, Accept, Authorization" 
     />

0

পোকোজ্লোস্কির মন্তব্যে পুরোপুরি বর্ণিত। আমার AngularJS 1.2 1.2 এবং ASP.NET ওয়েব অপির সাথে কাজ করার সমাধান ছিল তবে আমি যখন AngularJS কে 1.3.3 এ উন্নীত করেছি তখন অনুরোধগুলি ব্যর্থ হয়েছিল।

  • ওয়েব অপি সার্ভারের সমাধানটি ছিল কনফিগারেশন পদ্ধতির শুরুতে বিকল্পগুলি অনুরোধগুলি পরিচালনা করা ( এই ব্লগ পোস্টে আরও তথ্য ):

    app.Use(async (context, next) =>
    {
        IOwinRequest req = context.Request;
        IOwinResponse res = context.Response;
        if (req.Path.StartsWithSegments(new PathString("/Token")))
        {
            var origin = req.Headers.Get("Origin");
            if (!string.IsNullOrEmpty(origin))
            {
                res.Headers.Set("Access-Control-Allow-Origin", origin);
            }
            if (req.Method == "OPTIONS")
            {
                res.StatusCode = 200;
                res.Headers.AppendCommaSeparatedValues("Access-Control-Allow-Methods", "GET", "POST");
                res.Headers.AppendCommaSeparatedValues("Access-Control-Allow-Headers", "authorization", "content-type");
                return;
            }
        }
        await next();
    });

উপরেরটি আমার পক্ষে কাজ করে না। ASP.NET WEB API 2.2 এবং এর পরে অ্যাঙ্গুলারজেএস এর সাথে ব্যবহারের জন্য সিওআরএস সক্ষম করার জন্য আরও একটি সহজ সমাধান রয়েছে। মাইক্রোসফ্ট ওয়েবএপিআই সিওআর প্যাকেজটি নুগেট থেকে তারপরে আপনার ওয়েবএপিআই কনফিগারেশনের ফাইলটিতে পান ... var cors = নতুন সক্ষমকর্সঅ্যাট্রিবিউট ("www.example.com", " ", " "); config.EnableCors (CORS); মাইক্রোসফ্ট সাইটে বিশদটি
কিমকি নাম

0

আপনি যদি REST এপিআই এর জন্য জার্সি ব্যবহার করছেন তবে আপনি নীচের মতো করতে পারেন

আপনাকে আপনার ওয়েবসার্ফিকেশন বাস্তবায়ন পরিবর্তন করতে হবে না।

আমি জার্সি ২.x এর জন্য ব্যাখ্যা করব

1) নীচে প্রদর্শিত হিসাবে প্রথমে একটি রেসপন্স ফিল্টার যুক্ত করুন

import java.io.IOException;

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;

public class CorsResponseFilter implements ContainerResponseFilter {

@Override
public void filter(ContainerRequestContext requestContext,   ContainerResponseContext responseContext)
    throws IOException {
        responseContext.getHeaders().add("Access-Control-Allow-Origin","*");
        responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");

  }
}

2) তারপরে ওয়েব.এক্সএমএলে, জার্সি সার্লেট প্রজ্ঞাপনে নীচে যুক্ত করুন

    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>YOUR PACKAGE.CorsResponseFilter</param-value>
    </init-param>

0

আমি এই সমস্যাটি সমাধানের চেষ্টা ছেড়ে দিয়েছি।

আমার আইআইএস ওয়েবকনফাইগের Access-Control-Allow-Methodsএটিতে " " প্রাসঙ্গিক ছিল , আমি আমার কৌনিক কোডে কনফিগারেশন সেটিংস যুক্ত করার পরীক্ষা-নিরীক্ষা করেছি, তবে ক্রোম-ডোমেন জেএসওএন ওয়েব পরিষেবাদি কল করার জন্য Chrome কয়েক ঘন্টা চেষ্টা করার পরে, আমি খারাপভাবে ছেড়ে দিয়েছি।

শেষ পর্যন্ত, আমি একটি, মূক ASP.Net হ্যান্ডলার ওয়েবপেজ পেয়েছিলাম যোগ যে আমার তাদেরকে JSON ওয়েব পরিষেবা কল, এবং ফলাফল দেখাবে। এটি 2 মিনিটের মধ্যে চলেছিল।

আমি যে কোডটি ব্যবহার করেছি তা এখানে:

public class LoadJSONData : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";

        string URL = "......";

        using (var client = new HttpClient())
        {
            // New code:
            client.BaseAddress = new Uri(URL);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Add("Authorization", "Basic AUTHORIZATION_STRING");

            HttpResponseMessage response = client.GetAsync(URL).Result;
            if (response.IsSuccessStatusCode)
            {
                var content = response.Content.ReadAsStringAsync().Result;
                context.Response.Write("Success: " + content);
            }
            else
            {
                context.Response.Write(response.StatusCode + " : Message - " + response.ReasonPhrase);
            }
        }
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

এবং আমার কৌণিক নিয়ামক ...

$http.get("/Handlers/LoadJSONData.ashx")
   .success(function (data) {
      ....
   });

আমি নিশ্চিত যে এটি করার সহজ / আরও সাধারণ উপায় আছে তবে জীবনটি খুব ছোট ...

এটি আমার পক্ষে কাজ করেছে এবং আমি এখনই স্বাভাবিক কাজ করে যেতে পারি !!


0

আইআইএস এমভিসি 5 / কৌণিক সিএলআইয়ের জন্য (হ্যাঁ, আমি ভাল করেই জানি যে আপনার সমস্যাটি কৌণিক জেএসের সাথে সম্পর্কিত) প্রকল্পটি এপিআই সহ আমি নিম্নলিখিতটি করেছি:

<system.webServer>নোডের অধীনে ওয়েবকনফিগ

    <staticContent>
      <remove fileExtension=".woff2" />
      <mimeMap fileExtension=".woff2" mimeType="font/woff2" />
    </staticContent>
    <httpProtocol>
      <customHeaders>
        <clear />
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type, atv2" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS"/>
      </customHeaders>
    </httpProtocol>

global.asax.cs

protected void Application_BeginRequest() {
  if (Request.Headers.AllKeys.Contains("Origin", StringComparer.OrdinalIgnoreCase) && Request.HttpMethod == "OPTIONS") {
    Response.Flush();
    Response.End();
  }
}

এটি অন্যান্য সমস্ত রান না করে এমভিসি এবং ওয়েবএপিআই উভয়ের জন্য আপনার সমস্যার সমাধান করা উচিত। এরপরে আমি কৌনিক সিএলআই প্রকল্পে একটি এইচটিপিআইন্টারসেপ্টর তৈরি করেছি যা স্বয়ংক্রিয়ভাবে সম্পর্কিত শিরোনামের তথ্যটিতে যুক্ত হয়। আশা করি এটি কাউকে একই পরিস্থিতিতে সাহায্য করবে helps


0

পার্টিতে কিছুটা দেরি,

যদি আপনি অ্যাংুলার 7 (বা 5/6/7) এবং পিএইচপি API হিসাবে এবং এখনও এই ত্রুটিটি ব্যবহার করে থাকেন তবে নীচের পয়েন্টে (পিএইচপি এপিআই) নিম্নলিখিত শিরোনাম বিকল্পগুলি যুক্ত করার চেষ্টা করুন।

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

দ্রষ্টব্য : কেবল যা প্রয়োজন তা হ'ল Access-Control-Allow-Methods। তবে, আমি এখানে অন্য দুটি আটকানো করছি Access-Control-Allow-Originএবং Access-Control-Allow-Headersকেবলমাত্র আপনার এপিআইতে সঠিকভাবে কথা বলার জন্য অ্যাংুলার অ্যাপ্লিকেশনটি যথাযথভাবে সেট করার জন্য আপনার প্রয়োজন হবে need

আশা করি এটি কাউকে সাহায্য করবে।

চিয়ার্স।

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