এএসপি.নেট ওয়েব এপিআই - পুট & মুছে ফেলা নিষিদ্ধ নয় - আইআইএস 8


145

আমি সম্প্রতি ভিজ্যুয়াল স্টুডিও 2010 থেকে ভিজ্যুয়াল স্টুডিও 2012 আরসিতে আপগ্রেড করেছি। ইনস্টলারটি আইআইএস 8 এক্সপ্রেস ইনস্টল করে যা ভিজ্যুয়াল স্টুডিও এখন ডিফল্ট ওয়েব সার্ভার হিসাবে ব্যবহার করে।

আইআইএস 8 আমার ওয়েবে এপিআই অনুরোধগুলিকে অবরুদ্ধ করছে যা পুট এবং ডিফল্ট ক্রিয়াগুলি ব্যবহার করে। আইআইএস 405 ত্রুটি প্রদান করে The requested resource does not support http method 'PUT',।

আমি জানি মানুষের অতীতে এর সাথে সমস্যা আছে এবং স্ট্যাক ওভারফ্লোতে এটি সম্পর্কে বেশ কয়েকটি বার্তা রয়েছে। আইআইএস 7 এক্সপ্রেসের মাধ্যমে সমাধানটি ছিল ওয়েবড্যাভ আনইনস্টল করা। দুর্ভাগ্যক্রমে আমি আইআইএস 8 দিয়ে এটি করার কোনও উপায় দেখতে পাচ্ছি না।

আমি অ্যাপ্লিকেশন হোস্টকনফিগ থেকে ওয়েবড্যাভ বিভাগগুলি সম্পাদনা করার চেষ্টা করেছি কিন্তু এটি কোনও সাহায্য করেনি। উদাহরণস্বরূপ আমি <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />কনফিগার ফাইল থেকে সরিয়েছি ।

আমি এই উপর অনেক দীর্ঘ ব্যয় করেছি। পুট এবং ডিলিট সক্ষম করার জন্য একটি সহজ উপায় থাকতে হবে?


এটি আরটিএম সংস্করণে এখনও ভাঙা। এটিতে মাত্র 3 ঘন্টা নষ্ট করা ... অতিরিক্ত ক্রিয়া যুক্ত করা দরকার ছিল কেবল ExtensionlessUrl-Integrated-4.0
লেপি

1
আমি মনে করি এটি ভেঙে গেছে তবে এটি ডিজাইনের মাধ্যমে। আমি মনে করি ডিফল্ট আচরণ পরিবর্তনটি ওয়েবডিএভিতে হস্তক্ষেপ করবে এবং পিছনে সামঞ্জস্যতা ভেঙে দেবে। ওয়েবডেভিটি ইনস্টল করার সময় এটি আইআইএস 7 এর সাথেও কাজ করে না।
চিহ্নিত করুন

আমিও এই পোস্টে 6 ঘন্টা পরে এই মাত্র 3 ঘন্টা নষ্ট করেছি
ব্রায়ান জেনকিন্স

দয়া করে তাকান stackoverflow.com/a/55134621/4746570
BehrouzMoslem

উত্তর:


162

ঠিক আছে. অবশেষে আমি এর নীচে পেয়েছি। আইআইএস 8 এর সাথে পুট এবং ডিলিটি ক্রিয়াগুলি সঠিকভাবে কাজ করতে আপনাকে কয়েকটি হুপের মধ্য দিয়ে ঝাঁপিয়ে পড়তে হবে। প্রকৃতপক্ষে যদি আপনি ভিএস 2012 এর মুক্তির প্রার্থী ইনস্টল করেন এবং একটি নতুন ওয়েবে এপিআই প্রকল্প তৈরি করেন তবে আপনি দেখতে পাবেন যে নমুনা পুট এবং মুছে ফেলা পদ্ধতিগুলি বাক্সের বাইরে 404 ত্রুটি ফিরিয়ে দেয়।

ওয়েব এপিআইয়ের সাথে পুট এবং ডিলিট ক্রিয়াগুলি ব্যবহার করতে আপনাকে% ব্যবহারকারী প্রোফাইল% \ ডকুমেন্টস \ আইস এক্সপ্রেস \ কনফিগারেশন \ প্রয়োগহোস্ট.কনফিগ সম্পাদনা করতে হবে এবং এক্সটেনশনলেস ইউআরএল হ্যান্ডলারের ক্রিয়াগুলি নিম্নলিখিত হিসাবে যুক্ত করতে হবে:

এই লাইনটি পরিবর্তন করুন:

<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

প্রতি:

<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

উপরের পাশাপাশি আপনার অবশ্যই নিশ্চিত হওয়া উচিত যে ওয়েবডিএভি আপনার অনুরোধগুলিতে হস্তক্ষেপ করছে না। এপ্লিকেশনহোস্ট.কনফিগ থেকে নিম্নলিখিত লাইনগুলিতে মন্তব্য করে এটি করা যেতে পারে।

<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />
<add name="WebDAVModule" /> 
<add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />

এছাড়াও সচেতন হন যে ডিফল্ট ওয়েব এপিআই কনভেনশন হ'ল আপনার পদ্ধতির নামটি আমন্ত্রিত এইচটিটিপি ক্রিয়া হিসাবে একই হওয়া উচিত। উদাহরণস্বরূপ, যদি আপনি কোনও HTTP মুছে ফেলার অনুরোধ পাঠান তবে আপনার পদ্ধতিটি ডিফল্টরূপে মুছুন নামকরণ করা উচিত।


9
আইআইএস 8-তে অপ্টিশন ক্রিয়া সহ একই সমস্যার জন্য (যেখানে আপনার হ্যান্ডেলারের আগে অন্য কোনও কিছু বাধা দিচ্ছে) আপনার ওয়েবকনফাইগে <নাম নাম = "অপশনসবার্বহ্যান্ডলার" /> চেষ্টা করুন। এই বিষয়টির জন্য, আমি যখন সাধারণ নিয়ম হিসাবে সম্ভব হয় অ্যাপ্লিকেশন হোস্টকনফিগের সাথে গোলযোগের বিষয়ে আপনার স্থানীয় ওয়েবকনফিগের "অপসারণ" কৌশলটি ব্যবহার করার পরামর্শ দেব
জেসন

7
সার্ভার স্তরে ওয়েবডিএভি অপসারণের পরিবর্তে নক-অন-এফেক্ট থাকতে পারে যা এখানে প্রদর্শিত হিসাবে আপনার প্রকল্প থেকে এটিকে সরিয়ে ফেলা ভাল: stackoverflow.com/a/14465655/428280
পাকিত

এবং তারপর কি? এমনকি এটি স্থানীয়ভাবে কাজ করবে তবে অ্যাজুরেতে কাজ করবে না
টুলকিট

3
এমন একটি উত্তর যা এমনকি ডেভ মেশিনেও সিস্টেম সেটিংস সংশোধন করার নির্দেশ দেয়, উত্তর হতে পারে না। এটি একটি লক্ষণ সমাধান করে এবং টিম এবং উত্পাদনে সত্যই সহায়তা করে না। আপনি কি প্রতিটি মেশিনে এটি প্রতিলিপি করবেন? সন্তোষ সাহের উত্তর দেখুন।
আন্ড্রে ওয়ার্ল্যাং

এছাড়াও WebDAVModule, সন্তোষ সাহের উত্তর অনুসারে আমারও মডিউল বিভাগ থেকে অপসারণ করা দরকার ।
Ivaylo স্লাভভ

125

আপনার ওয়েব.কনফিগ ফাইলটি নীচের মতো পরিবর্তন করুন। এটি কবজ মত কাজ করবে।

নোডে <system.webServer>কোডের অংশের নিচে যুক্ত করুন

<modules runAllManagedModulesForAllRequests="true">
  <remove name="WebDAVModule"/>
</modules>

যুক্ত করার পরে, আপনার ওয়েব.কনফিগ নীচের মত দেখতে পাবেন

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule"/>
    </modules>
    <httpProtocol>
    <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    </customHeaders>
    </httpProtocol>
    <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

3
ওয়েবড্যাভমোডুল অপসারণ করা এই সমস্যাটি উত্থাপনের সঠিক উপায়।
মিস্রাফি

6
আমার দিনটি সংরক্ষণ করা হয়েছে: <মডিউলগুলি চালিত সমস্ত ম্যানেজডমডিউলসফরআলরেকুইটস = "সত্য"> <অপসারণ নাম = "ওয়েবডিএভিডমডিউল" /> </modules>
পিটার স্টিগনার

3
কাস্টম শিরোনামগুলির প্রয়োজন হবে না কারণ তারা CORS এর সাথে সম্পর্কিত এবং এইভাবে আপনি কোনও সুরক্ষা গর্তে প্রেরণা করছেন। সম্পর্কিত অংশটি WebDAVModuleপ্রাসঙ্গিক।
আন্দ্রে ওয়ার্ল্যাং

2
এই উত্তরটি একমাত্র ব্যতিক্রমের সাথেই সঠিক যে হ্যান্ডলারের নাম আইআইএস সংস্করণগুলিতে পৃথক হতে পারে - উদাহরণস্বরূপ 7.5 টি ব্যবহার "ExtensionlessUrlHandler-Integrated-4.0"(উপরের উত্তর হিসাবে) যখন আইআইএস 8.5 এর এই নামটি পুনরায় নামকরণ করা হয়েছে "ExtensionlessUrl-Integrated-4.0"( মার্ক এস দ্বারাও উল্লেখ করা হয়েছে ) হ্যান্ডলারের নামটি দেখানো হয়েছে আইআইএস ত্রুটি পৃষ্ঠাটি একবার, আপনি ত্রুটিটি পেয়ে গেলে, কোনটি সেট করবেন তা জানার বিষয়টি তুচ্ছ হওয়া উচিত different দুটি হোস্টিংয়ের ব্যবহার বিভিন্ন হোস্টিং পরিবেশকে সমর্থন করার জন্য করি
Ivaylo Slavov

7
RunAllManagedModulesForAllRequests = "সত্য" - - একটি সমাধান হিসেবে এটা আমাকে একটু ভিতরে সব মরা আমি এই দেখতে তোলে britishdeveloper.co.uk/2010/06/...
অলিভার

61

ওয়েবডিএভি সরান আমার মামলার জন্য পুরোপুরি কাজ করে:

<modules>
  <remove name="WebDAVModule"/>
</modules>
<handlers>
  <remove name="WebDAV" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" 
       type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

আইআইএস বা মেশিন.কনফিগের মাধ্যমে সমস্যা সমাধানের পরিবর্তে ওয়েবকনফাইগের মাধ্যমে সমস্যাটি সমাধান করা সর্বদা ভাল the


এটি আমার পক্ষে কাজ করেছে, যেখানে অন্যরা কোনও কারণে নয় (আইআইএস 8.5-এ ছিল) ধন্যবাদ
জন

4
সরান ওয়েবডিএভিমোডুল আমার জন্য কাজ করেছে, হ্যান্ডলার ওয়েবডিএভি (আইআইএস 8.0) অপসারণ করার দরকার নেই।
পিটারএস

3
মাত্র ওয়েবড্যাভ অপসারণ ফ্রেমওয়ার্ক 4.6.2 আইআইএস 8.5-তে কাজ করে
আবদুল রেহমান

45

আপনার ওয়েবকনফিগ আপডেট করুন

  <system.webServer>
    <modules>
      <remove name="WebDAVModule"/>
    </modules>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrl-Integrated-4.0" />
      <add name="ExtensionlessUrl-Integrated-4.0"
           path="*."
           verb="GET,HEAD,POST,DEBUG,DELETE,PUT"
           type="System.Web.Handlers.TransferRequestHandler"
           preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>

http://odetocode.com/blogs/scott/archive/2012/08/07/configuration-tips-for-asp-net-mvc-4-on-a-windows.aspx

আপনার হোস্ট কনফিগারেশনের সংশোধন করার প্রয়োজনীয়তা সরিয়ে দেয়।


1
আমি ইতিমধ্যে অন্য লাইনে লেখা ছিল কিন্তু এটি কাজ করে না। <অপসারণ নাম = "WebDAVModule" /> এবং <সরানো নাম = "WebDAV" /> লাইন যুক্ত করার পরে এটি এখন কাজ করছে। আমার পক্ষ থেকে অনেক অনেক ধন্যবাদ!
বঙ্কতেশ্বর নারায়ণ

এটি কাজ করে তবে কনফিগারেশন লক করার কারণে ব্যর্থ হতে পারে << মডিউলস> ওয়েবকনফিগের ব্যবহার রোধ করতে। এই ক্ষেত্রে, আপনাকে অ্যাপ্লিকেশন হোস্টকনফিগটিতে কনফিগারেশন লকটি অক্ষম করতে হবে। যদি কোনও কারণে অ্যাপ্লিকেশন হোস্টকনফিগের উপর আপনার নিয়ন্ত্রণ না থাকে তবে এই পদ্ধতির ব্যবহার করা যাবে না।
ফ্লোরিয়ান শীতকাল

আইআইএস 10 নিয়ে কাজ করেছি, যদিও আমি স্রেফ "*" কে ক্রিয়াপদ হিসাবে ব্যবহার করেছি
জাভিয়ের জি

1
আইআইএস 10 এবং ওয়েব এপিআই 2 দিয়ে কাজ করেছেন Wor কাজ করা, আমার যুক্ত করা উচিত, আমি অনলাইনে খুঁজে পেয়েছি আরও ডজন "সমাধান" পরে। ধন্যবাদ!
ম্যাট ওয়েস্ট

@ ক্রিসমারিসিক: এটি আমার জন্য একটি মন্ত্রীর মতো কাজ করেছে ধন্যবাদ!
ডিভ তিওয়ারি

18

Asp.Net Web API- এ ওয়েবকনফিগ। এটি সমস্ত ব্রাউজারে কাজ করে।

System.web ট্যাগের মধ্যে নিম্নলিখিত কোড যুক্ত করুন

<webServices>
  <protocols>
    <add name="HttpGet"/>
    <add name="HttpPost"/>
  </protocols>
</webServices>

নীচে কোড সহ আপনার system.webserver ট্যাগটি প্রতিস্থাপন করুন

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
  </customHeaders>
</httpProtocol>
<modules runAllManagedModulesForAllRequests="false">
  <remove name="WebDAVModule" />
</modules>

<validation validateIntegratedModeConfiguration="false" />
<handlers>
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
  <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />

  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

</handlers>


আইআইএস 7.5-এ আমার এই সমস্যা ছিল এবং এই ফিক্সটি পুরোপুরি কার্যকর হয়েছিল। আমার সমস্ত সিস্টেম মুছে ফেলার পরিবর্তে b ওয়েবেসভার সামগ্রীটি, আমি কেবলমাত্র প্রাসঙ্গিক সেটিংসটিকে আমার নিজের সেটিংসে মার্জ করেছি।
কিথ ওয়ালটন

38
সতর্কতা বিশেষ : উপরে কোডে কাস্টম হেডার অধ্যায় পারবেন যেকোন - যা হল সাইটি কোনো ব্রাউজার থেকে আপনার API কল করার বড় নিরাপত্তা ঝুঁকি । সিওআরএস পড়ুন, যা কার্যকরভাবে সেই হেডারগুলি সক্ষম করছে are
profMamba

আইআইএস 7.5 এও এই সমস্যাটি ছিল এবং এটি কাজ করে। প্রত্যেকের জন্য কর খোলা জড়িত ঝুঁকি সম্পর্কে উপরে টোকিটের বার্তাটি পড়তে ভুলবেন না। এছাড়াও তার মন্তব্য upvote কারণ tidोंব মত একটি খুব মূল্যবান।
sjdirect

আমি মনে করি না এই ক্ষেত্রে আপনার কাস্টম শিরোনামের মোটেই প্রয়োজন। system.webserverবিভাগটির বাকী অংশটি পর্যাপ্ত হওয়া উচিত - কেবলমাত্র এক্সটেনশনহীন url হ্যান্ডলারের সঠিক নামটি নিশ্চিত করুন ।
Ivaylo স্লাভভ

1
@ নিনিকো আপনার কেবলমাত্র বিশ্বস্ত সাইটগুলিকে অ্যাক্সেস-কন্ট্রোল-মঞ্জুরি-উত্সের অনুমতি দিতে হবে অর্থাৎ আপনার ওয়েবসাইট (গুলি) এর URL দিয়ে "*" প্রতিস্থাপন করুন। আপনি যদি পুরো ওয়েবে (যা সাধারণত একটি খারাপ ধারণা) বিশ্বাস করতে না চান তবে এই সম্পত্তিটি সমস্ত বিশ্বস্ত সাইটের একটি সাদা তালিকা।
profMamba

5

এটি আমার সাথে অন্যান্য উত্তরগুলির সাথে একসাথে কাজ করেছে on আমার ত্রুটিটি বিশেষত একটি 404.6 ছিল

<system.webServer>
  <security>
  <requestFiltering>
    <verbs applyToWebDAV="false">
       <add verb="DELETE" allowed="true" />
    </verbs>
  </requestFiltering>
  </security>
</system.webServer>

আপনি যখন অ্যাপসিএমডি চালান, তখন এটিই আপনার ওয়েবের মধ্যে রাখে on কনফিগ (অ্যাপ্লিকেশনডওবিডিএভি বিট ব্যতীত)।
চেজ ফ্লোরেল

5

এই সমস্যাটিতে যে কেউ চালাতে পারে তার জন্য কেবল দ্রুত আপডেট আজ অবধি,% ইউজার প্রোফাইল% \ ডকুমেন্টস \ আইসপ্রেসেস \ কনফিগারেশন \ প্রয়োগহোস্ট.কনফাইগ আর কাজ করে না (এটি এখন পর্যন্ত ঠিকঠাক কাজ করছিল, এটি উইন্ডোজ আপডেটের কারণে হয়েছে কিনা তা নিশ্চিত নয়)। কয়েক ঘন্টা হতাশার পরে, আমি এই হ্যান্ডলারগুলিকে সিস্টেমে যুক্ত করার জন্য ওয়েব.কনফিগ পরিবর্তন করেছি b ওয়েবেসভারটি এটির কাজ পেতে:

<handlers>
        <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
        <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
        <remove name="ExtensionlessUrlHandler-Integrated-4.0" />

        <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
        <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
        <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>

4

CORS সক্ষম করুন (সুন্দর এবং ঝরঝরে)

1. কর্স নুগেট প্যাকেজ যুক্ত করুন

Install-Package microsoft.aspnet.webapi.cors

2. WebApiConfig.cs ফাইলটিতে নিবন্ধন পদ্ধতিতে বেলো কোড যুক্ত করুন:

config.EnableCors();


উদাহরণস্বরূপ : System.Web.Http ব্যবহার করে;

namespace test
{
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services


        config.EnableCors(); //add this**************************


        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );           
    }
}
}

৩. নিয়ামকের নামস্থানে বেলো কোড যুক্ত করুন, পোস্ট, মুছে ফেলুন, পুট বা কোনও HTTP পদ্ধতি অন্তর্ভুক্ত করুন

[EnableCors(origins: "The address from which the request comes", headers: "*", methods: "*")]

উদা:

using System.Web.Http.Cors;//add this******************************
namespace Test.Controllers
{
[EnableCors(origins: "http://localhost:53681/HTML/Restaurant.html", headers: "*", methods: "*")]
public class RestaurantController : ApiController
{
    protected TestBusinessLayer DevTestBLL = new TestBusinessLayer();

    public List<Restaurant> GET()
    {
        return DevTestBLL.GetRestaurant();
    }

    public List<Restaurant> DELETE(int id)
    {
        return DevTestBLL.DeleteRestaurant(id);
    }       
}
}

তথ্যসূত্র: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api


4

কিছুই কাজ না করে, আমি নীচের পদক্ষেপগুলি দ্বারা এটি সমাধান করতে সক্ষম হয়েছি:

IS আইআইএস ইনস্টল করার সময়, 'ওয়েল ডেভ পাবলিশিং' আইআইএস সেটিংস নির্বাচন করেনি। • আইএনইটিএমজিআর - ডিফল্ট ওয়েবসাইট - অনুরোধ ফিল্টারিং - এইচটিটিপি ক্রিয়া - PUT হিসাবে সত্য


3

অন্তহীন অনুসন্ধান এবং ইতিমধ্যে সরবরাহিত উত্তরগুলি চেষ্টা করার পরে (পুট যুক্ত করুন, ক্রিয়াগুলি মুছে ফেলুন এবং ওয়েবেডাভ সরান) এটি কার্যকর হয়নি।

আমি আইআইএস লগিং সেটিংসে গিয়েছিলাম:> লগ ফাইলগুলি দেখুন। আমার ক্ষেত্রে ডাব্লু 3 এসভিসি 4 সর্বশেষ তারিখ সহ ফোল্ডার ছিল, ফোল্ডারটি খুলল, সর্বশেষ লগ ফাইলটি সন্ধান করেছে এবং এই এন্ট্রিটি দেখেছিল: GET / প্রত্যাখ্যান-দ্বারা-আরলস্ক্যান ~ / এমআইডিওআরভি / এপিআই / অ্যাপনি নাম / আপডেটমথড

আপডেট পদ্ধতিটি ক্রিয়াটি জিইটি দিয়ে তালিকাভুক্ত করা হয়েছিল, আজব? সুতরাং আমি প্রত্যাখাত-দ্বারা-আরলস্ক্যানের জন্য গুগল করেছিলাম এবং এই লিঙ্কটি পেয়েছি: উরলস্ক্যান আমার ব্লগটি ভেঙে দিয়েছে

আমি এখানে গিয়েছিলাম:% উইন্ডির% \ system32 \ inetsrv \ urlscan \ UrlScan.ini

মূলত, ইউরলস্ক্যান পুট এবং ডিলেট নিষ্ক্রিয় করে। আমি এই INI ফাইলটি খুললাম, PUT এবং DELETE কে AllowVerbs এ যুক্ত করেছি এবং এগুলি DenyVerbs তালিকা থেকে সরিয়েছি। আমি INI ফাইলটি সংরক্ষণ করেছিলাম এবং এটি কাজ করেছে! সুতরাং আমার জন্য এক্সটেনশনহীন ইউআরএল হ্যান্ডলার ইঙ্গিতগুলির পাশে এই পদক্ষেপগুলি প্রয়োজনীয় ছিল।

উইন্ডোজ ওয়েব সার্ভার ২০০৮ আর 2 (bit৪ বিট), আইআইএস .5.৫। আমি এটি ডটনেটনুক (ডিএনএন) ওয়েবএপিআইয়ের সাথে একত্রে ব্যবহার করছি। ASP.Net 4.0 আমার আপডেট পদ্ধতি:

[HttpPut]
[DnnAuthorize(StaticRoles = "MyRoleNames")]
public HttpResponseMessage UpdateMETHOD(DTO.MyObject myData)

3

পিএইচপি এর জন্য, এটি কেবলমাত্র ছিল:

  1. আইআইএস খুলুন
  2. হ্যান্ডলার ম্যাপিংস এ যান
  3. php5.6.x বা php7.0.x এ সম্পাদনা ক্লিক করুন
  4. "অনুরোধ বিধিনিষেধ" ক্লিক করুন
  5. ক্রিয়াপদ ট্যাবের অধীনে, "নিম্নলিখিত ক্রিয়াগুলির মধ্যে একটি" নির্বাচন করুন এবং "জিইটি, হেড, পোস্ট, পুট, প্যাচ, মোছা, অপশন" যুক্ত করুন

আমি ভাবছি এটি অন্যান্য হ্যান্ডলারের সাথেও কাজ করবে।


2

উপরের সমস্ত সমাধান ছাড়াও , ডিলিট পদ্ধতিতে আপনার " আইডি " বা কোনও কাস্টম সংজ্ঞায়িত প্যারামিটার রুট কনফিগারেশনের সাথে মিলেছে কিনা তা পরীক্ষা করে দেখুন।

public void Delete(int id)
{
 //some code here
}

যদি আপনি পুনরাবৃত্তি 405 ত্রুটি দিয়ে আঘাত করেন তবে উপরের হিসাবে ডিফল্টটিতে পদ্ধতি স্বাক্ষরটিকে পুনরায় সেট করুন এবং চেষ্টা করুন।

ডিফল্টরূপে রুট কনফিগারেশনটি ইউআরএল-এ আইডি খুঁজবে । সুতরাং প্যারামিটারের নাম আইডি এখানে গুরুত্বপূর্ণ, যদি না আপনি App_Start ফোল্ডারের অধীনে রুট কনফিগারেশন পরিবর্তন করেন ।

আপনি যদিও আইডির ডেটা টাইপ পরিবর্তন করতে পারেন ।

উদাহরণস্বরূপ নীচের পদ্ধতিতে ঠিক কাজ করা উচিত:

public void Delete(string id)
{
 //some code here
}

দ্রষ্টব্য: এছাড়াও নিশ্চিত হয়ে নিন যে আপনি url এর মাধ্যমে ডেটা পাস করেছেন এমন ডেটা পদ্ধতি নয় যা দেহের সামগ্রী হিসাবে পেলড বহন করবে।

DELETE http://{url}/{action}/{id}

উদাহরণ:

DELETE http://localhost/item/1

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


2

আমি আপনার সাথে একই সমস্যার মুখোমুখি হয়েছি, তারপরে এটি সমাধান করেছি, এখানে সমাধান রয়েছে, আমি আশা করি এটি সম্ভবত
প্রথম সহায়তা করতে পারে

আইআইএস modulesকনফিগারেশনে, ওয়েব ডিএভিভিমোডিয়াল লুপ আপ করুন , যদি আপনার ওয়েব সার্ভারে এটি থাকে, তবে এটি সরান

দ্বিতীয়

আইআইএস handler mappingsকনফিগারেশনে আপনি হ্যান্ডলারের সক্রিয়করণের তালিকাটি দেখতে পাচ্ছেন, the PHP itemসম্পাদনা পৃষ্ঠায় এটি চয়ন করতে , সম্পাদনা করতে, বিধিনিষেধের বাটনটি ক্লিক করুন, তারপরে the verbs tabমোডালটিতে নির্বাচন করুন , হ্যান্ডেল লেবেল হ্যান্ডেল করার জন্য ক্রিয়াগুলি নির্দিষ্ট করে, চেক করুন all verbs radio, তারপরে ঠিক আছে ক্লিক করুন, আপনি সম্ভবত একটি সতর্কতাও দেখতে পান, এটি আমাদের দেখায় যে পিএইচপি-সিজিআই কার্যকর করার জন্য ডাবল উদ্ধৃতি চিহ্ন ব্যবহার করে, তারপর এটি করুন

এটি হয়ে গেলে, আইআইএস সার্ভারটি পুনরায় চালু করুন, ঠিক আছে

এখানে চিত্র বর্ণনা লিখুন


1
আমি কেবল আইআইএস ওয়েবসাইট থেকে ওয়েবডিএভিভিমডুলকে সরিয়েছি এবং এটি আমার জন্য কাজ করেছে
উমাইর মালি

1

আপনি সঠিক কনফিগারেশন ফাইল সম্পাদনা করেছেন কিনা তা নিশ্চিত নই। নিম্নলিখিত পদক্ষেপ চেষ্টা করুন

  1. % ব্যবহারকারী প্রোফাইল% \ ducuments \ iisexpress \ config \ applicationhost.config খুলুন

  2. ডিফল্টরূপে বেলো প্রদত্ত এন্ট্রিগুলিকে এপ্লিকেশনহস্ট.কনফিগ ফাইলে মন্তব্য করা হয়। এই এন্ট্রিগুলিকে আপত্তিহীন করুন।

<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />


<add name="WebDAVModule" />
<add name="WebDAV" path="*"
 verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK"
 modules="WebDAVModule" resourceType="Unspecified" requireAccess="None"
 />

4
অ্যাপ্লিকেশনহোস্ট.কনফিগের সাথে গোলযোগ করছেন? নোপ
টুলকিট

অ্যাপ্লিকেশন কনফিগারেশন ফাইল ব্যতীত অন্যের সাথে গণ্ডগোল করা উচিত নয়। প্রথম- আপনি পুরো সার্ভারের জন্য এটি করবেন এবং ভুলে যাবেন, তারপরে অনেক লোক আশ্চর্য হবে যে এটি কীভাবে এই মেশিনে কাজ করে এবং বাকীটিতে কাজ করে না। এছাড়াও, অ্যাপ্লিকেশনটি হোস্ট করা সার্ভারে যদি আপনাকে আইআইএস কনফিগারেশন ফাইলে অ্যাক্সেসের অনুমতি না দেওয়া হয় তবে আপনাকে ওয়েবকনফাইগ এ এটি ব্যবহার করতে হবে। আপনার ডেভ সার্ভারের উপরের আপডেটটি আছে তা কল্পনা করুন, আপনার ওয়েবকনফিগটি কি সঠিক হবে? কেন উত্পাদন মোতায়েন ব্যর্থ হয়েছে তা তদন্তে কারও দিনকে loose
িলা

1

এখানে আপনি কীভাবে আইআইএস ম্যানেজার জিইউআই ব্যবহার করে অতিরিক্ত এইচটিটিপি ভার্জবকে অনুমতি দিচ্ছেন তা এখানে।

  1. আইআইএস ম্যানেজারে, আপনি যে সাইটের জন্য পুট বা মুছে ফেলতে চান সেটি নির্বাচন করুন।

  2. "অনুরোধ ফিল্টারিং" বিকল্পটি ক্লিক করুন। "HTTP ক্রিয়াগুলি" ট্যাবে ক্লিক করুন Click

  3. সাইডবারের "ক্রিয়া অনুমতি দিন ..." লিঙ্কটি ক্লিক করুন।

  4. "ডিলেট করুন" টাইপ করা বাক্সটিতে ঠিক আছে ক্লিক করুন।

  5. পার্শ্বদণ্ডে আবার "Verb এর অনুমতি দিন ..." লিঙ্কটি ক্লিক করুন।

  6. "PUT" টাইপ করা বাক্সটিতে ওকে ক্লিক করুন।


দুর্দান্ত চেষ্টা - একবারের জন্য আলাদা কিছু - তবে এখনও কার্যকর হয়নি!
ozzy432836

আমি এসও এবং অন্য কোথাও প্রস্তাবিত যা দেখেছি সেগুলি চেষ্টা করেছিলাম। অবশেষে আমি এটি চেষ্টা করেছিলাম এবং এটি পুরোপুরি কার্যকর হয়েছিল। আমার ক্ষেত্রে, পুট এবং ডিলিট ক্রিয়াগুলি ইতিমধ্যে তালিকায় ছিল এবং আমি প্রথমে সেগুলি সরিয়ে ফেলতে হয়েছিল, তারপরে সেগুলিকে অনুমতি দিন ... লিংকটি ব্যবহার করে আবার যুক্ত করতে হয়েছিল, কিন্তু তবুও, যখন অন্য কিছু ছিল না তখন এটি কার্যকর হয়েছিল। তোমাকে অনেক ধন্যবাদ!
জেটেনেসেন

1

আমি এমভিসি অ্যাপ্লিকেশনে একটি অ্যাশএক্স ফাইল ব্যবহার করছি এবং উপরের উত্তরগুলির কোনওটিই আমার পক্ষে কার্যকর হয়নি। আইআইএস 10।

এখানে কি কাজ করেছে। আইআইএস বা ওয়েবকনফাইগের " এক্সটেনশনহীনআরল-ইন্টিগ্রেটেড -৪.০ " পরিবর্তনের পরিবর্তে আমি " * .আশাক্স " ফাইলগুলির জন্য " সিম্পলহ্যান্ডলারফ্যাক্টরি-ইন্টিগ্রেটেড -৪.০ " পরিবর্তন করেছি :

<add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" 
verb="GET,HEAD,POST,DEBUG,PUT,DELETE" 
type="System.Web.UI.SimpleHandlerFactory" 
resourceType="Unspecified" requireAccess="Script" 
preCondition="integratedMode,runtimeVersionv4.0" />

0

আর একটি কারণ নিম্নলিখিত হতে পারে:
আমি এই উত্তর অনুসারে ওয়েব অপি পদ্ধতির জন্য আমার url পরিবর্তন করেছি :

Url.Action("MyAction", "MyApiCtrl", new { httproute = "" })

তবে এই পদ্ধতিটি এর মতো লিঙ্ক তৈরি করে:

/api/MyApiCtrl?action=MyAction

এটি জিইটি এবং পোষ্ট অনুরোধগুলির সাথে সঠিকভাবে কাজ করে তবে পুট বা মোছার সাথে নয়।
সুতরাং আমি কেবল এটির সাথে প্রতিস্থাপন করেছি:

/api/MyApiCtrl

এবং এটি সমস্যার সমাধান করেছে।


0

আইআইএস 8.5 / উইন্ডোজ 2012R2 তে এখানে উল্লিখিত কিছুই আমার পক্ষে কাজ করেনি। ওয়েবডিএভি সরানোর অর্থ কী তা আমি জানি না তবে এটি আমার জন্য সমস্যাটি সমাধান করেনি।

নীচের পদক্ষেপগুলি আমাকে কী সাহায্য করেছিল;

  1. আমি আইআইএস ম্যানেজারের কাছে গেলাম।
  2. বাম প্যানেলে সাইটটি নির্বাচন করুন।
  3. বাম কার্যকারী অঞ্চলে, ওয়েবডিএভিএ নির্বাচন করুন, এটি ডাবল ক্লিক করে খোলে।
  4. ডানদিকের বেশিরভাগ প্যানেলে এটি অক্ষম করুন।

এখন সবকিছু কাজ করছে।


-1

আপনি আপনার মোছার পদ্ধতিটিকে পোষ্ট হিসাবে রূপান্তর করতে পারেন;

 [HttpPost]
 public void Delete(YourDomainModel itemToDelete)
 {
 }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.