ওয়েবএপিআই মোছা কাজ করছে না - 405 পদ্ধতি অনুমোদিত নয়


120

আমি এই সাইটে যে কোনও সহায়তার প্রশংসা করি কারণ সাইটটি আজ রাতে লাইভ হওয়ার কথা!

মুছুন পদ্ধতি সহ আমার একটি ওয়েব এপিআই কন্ট্রোলার রয়েছে। পদ্ধতিটি আইআইএস এক্সপ্রেস (উইন্ডোজ 8) চালিত আমার স্থানীয় মেশিনে জরিমানা কার্যকর করে তবে আমি লাইভ আইআইএস সার্ভারে এটি স্থাপন করার সাথে সাথেই (উইন্ডোজ সার্ভার ২০০৮ আর 2) এটি কাজ করা বন্ধ করে দেয় এবং নিম্নলিখিত ত্রুটি বার্তাটি ছুঁড়ে দেয়:

এইচটিটিপি ত্রুটি 405.0 - পদ্ধতিটি অনুমোদিত নয় আপনি যে পৃষ্ঠার সন্ধান করছেন সেটি প্রদর্শিত হতে পারে না কারণ একটি অবৈধ পদ্ধতি (HTTP ক্রিয়া) ব্যবহৃত হচ্ছে

সমাধানের জন্য আমি ওয়েবে ঘুরে দেখেছি এবং আমি সবচেয়ে যুক্তিসঙ্গত বাস্তবায়ন করেছি। আমার ওয়েব কনফিগারেশনে নিম্নলিখিত সেটিংস রয়েছে:

<system.webServer>
    <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,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>

আমি আইআইএস-এ হ্যান্ডলার ম্যাপিংস এবং অনুরোধ ফিল্টারিংয়েরও চেষ্টা করেছি no দয়া করে নোট করুন যে আইআইএস-এ থাকা ওয়েবডিএভি অনুমোদনের নিয়মগুলি অক্ষম বলে মনে হচ্ছে।

যে কোনও ধারণা প্রশংসিত হবে ধন্যবাদ।

উত্তর:


199

আমি শেষ পর্যন্ত সমাধান খুঁজে পেয়েছি! আপনি যদি একই সমস্যাটি দেখতে পান তবে নিম্নলিখিতগুলি আপনার ওয়েবকনফাইগে যুক্ত করুন

<system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule"/> <!-- ADD THIS -->
    </modules>
    ... rest of settings here

আশা করি এটা কাজে লাগবে


2
আমিও অনুযায়ী হ্যান্ডেলার বিভাগে একজন অপসারণ যোগ করার জন্য ছিল stackoverflow.com/a/6698096/254156
rrrr

3
এখানেও কাজ করেছেন। তবে কেউ কি আমাকে ওয়েবডিএভিমোডুলের সাথে সম্পর্ক ব্যাখ্যা করতে পারেন?
বোস এনকলার

11
যাঁরা কেবল অনুলিপি-পেস্ট করেছেন: রানআলম্যানেজডমডিউলসফোরআলরকুইয়েস্টস = "সত্য" সত্যই প্রয়োজন হয় না এবং প্রকৃতপক্ষে অন্যান্য জিনিসগুলি ভেঙে দিতে পারে।
জার শারদান

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

4
@ জারশারদান (এবং অন্যরা) এফওয়াইআই: আপনি যদি রানআল ম্যানেজডমডিউলসফোরএলআরকুইস্টস = "সত্য" বৈশিষ্ট্যটি সরিয়ে ফেলেন তবে আপনাকে <হ্যান্ডলারের> নোডের অধীনে <অপসারণ নাম = "ওয়েবডিএভি" /> যোগ করতে হবে।
অ্যারন

65

কিছু ক্ষেত্রে একে একে মডিউল থেকে সরিয়ে ফেললে পরবর্তী ত্রুটি তৈরি হতে পারে:

500.21 হ্যান্ডলার "ওয়েবডিএভি" এর মডিউল তালিকায় একটি খারাপ মডিউল "ওয়েবডিএভিমোডুল" রয়েছে

মডিউল: আইআইএস ওয়েব কোর বিজ্ঞপ্তি: এক্সিকিউটআউটউইচহ্যান্ডলার "

সমাধান এখানে পরামর্শ দেওয়া হয়েছিল । এটি হ্যান্ডলারগুলি থেকে অপসারণ করা প্রয়োজন।

<system.webServer>
    <modules>
        <remove name="WebDAVModule" />
    </modules>
    <handlers>
        <remove name="WebDAV" />
    </handlers>
</system.webServer>

1
এটি আমার পক্ষে কাজ করে তবে ওয়েবডিএভি আসলে কী তা নিয়ে কেউ আলোকপাত করতে পারে?
নজরুল মুহাইমিন

31

আমার ক্ষেত্রে উপরের সমাধানগুলির কোনওটিই কাজ করছে না। এটি ছিল কারণ আমি আমার পদ্ধতিতে প্যারামিটারটির নাম পরিবর্তন করেছি Delete

আমার ছিল

public void Delete(string Questionid)

পরিবর্তে

public void Delete(string id)

আমার idনামটি ব্যবহার করা দরকার কারণ এই নামটিই আমার WebApiConfigফাইলে ঘোষিত হয়েছে । idতৃতীয় এবং চতুর্থ লাইনে নামটি নোট করুন :

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

আমি থেকে এই সমাধান পেয়েছিলাম এখানে


15

এইচটিটিপি DELETEক্রিয়াটির জাভাস্ক্রিপ্ট অবশ্যই এর মতো হতে হবে:

$.ajax({
    **url: "/api/SomeController/" + id,**
    type: "DELETE",
    dataType: "json",
    success: function(data, statusText) {
        alert(data);
    },
    error: function(request, textStatus, error) {
        alert(error);
        debugger;
    }
});

এর মতো কিছু ব্যবহার করবেন না :

...
data: {id:id}
...

আপনি যখন POSTপদ্ধতিটি ব্যবহার করেন তখন ।


1
হাই @ পাভেল, আপনি যদি সত্যিই পুরোপুরি রেস্টলফুল বাস্তবায়ন ব্যবহার করেন তবে এটি সঠিক। দুর্ভাগ্যক্রমে, সবাই এগুলি করে না এবং এটি বিকাশকারীদের মুছে ফেলার পরিবর্তে পোষ্ট ব্যবহার করে দেখা খুব সাধারণ বিষয় this এটি পরিষ্কার করার জন্য ধন্যবাদ।
ক্রিস

5

এখানে প্রায় প্রতিটি সমাধান চেষ্টা করার পরে এটি আমার পক্ষে কাজ করেছিল। আপনার এপিআই কনফিগারেশন ফাইলে এটি যুক্ত করুন

<system.webServer>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <modules>
        <remove name="WebDAVModule" />
    </modules>
</system.webServer>

প্রচুর জিনিস চেষ্টা করে, এটি কাজ করেছিল। .NET সংস্করণ 4.6.1 - ধন্যবাদ।
কেতন

4

আপনি যদি আইআইএস 7.0 বা তার পরে সংস্করণ ব্যবহার করছেন। এই সমস্যাটি মূলত আইআইএস সার্ভারে ওয়েবডিএভি এক্সটেনশন মডিউল সম্পর্কিত। পোস্ট ব্যবহার করার সময় বা অ্যাকশন মোছার সময় এটি ঘটেছিল।

ওয়েব কনফিগারে নীচে সেটিংস চেষ্টা করুন

<system.webServer>
   <modules>
       <remove name="WebDAVModule" />
   </modules>
   <handlers>
     <remove name="WebDAV" />
   </handlers>
</system.webServer>

3

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

    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule"/> <!-- add this -->
    </modules>

ওয়েবকনফিগ ফাইলটিতে আমার সমস্যার সমাধান হয়েছে। এইভাবে আমি ক্লায়েন্টের পক্ষ থেকে কল করছিলাম

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri(environment.ServiceUrl);
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    HttpResponseMessage response = client.DeleteAsync("api/Producer/" + _nopProducerId).Result;
    if (response.IsSuccessStatusCode)
    {
        string strResult = response.Content.ReadAsAsync<string>().Result;
    }
}

2

অ্যাপ্লিকেশন হোস্টকনফিগ (সাধারণত সি: \ উইন্ডোজ \ সিস্টেম 32 \ ইনটসরভ \ কনফিগারেশন) ফাইলটিতে যান এবং অ্যাপ্লিকেশনে নিম্নলিখিত লাইনটি মন্তব্য করুন হোস্টকনফিগ

1) <হ্যান্ডলারের> এর অধীনে:

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

2) উপরোক্ত হ্যান্ডলার দ্বারা << মডিউলস> এর অধীনে নিম্নলিখিত মডিউলটি উল্লেখ করা হয়েছে বলে মন্তব্য করুন

<add name="WebDAVModule" />

অথবা আপনার নিজের ওয়েবকনফাইগে এই হ্যান্ডলারগুলি সরিয়ে নিতে অন্য উত্তর স্ট্যাকওভারফ্লো. com/a/47907578/1754743 ব্যবহার করুন, যদি আপনি মেশিন-প্রশস্ত কনফিগারেশন ফাইলটি পরিবর্তন করতে (বা না করতে) চান না
একুশ

2

আমার ক্ষেত্রে, আমি যুক্ত {id}করতে মিস [Route("")]করেছি এবং আমি একই ত্রুটি পেয়েছি। এটি যুক্ত করা আমার জন্য সমস্যাটি স্থির করে:[Route("{id}")]


অনেক ঘন্টা অপচয় করা সময়, এবং এটি যদি আপনার না হয় তবে আমি এখনও এই সমাধান করতে পারিনি .... আমি অবাক হচ্ছি কেন এটি 404: @
মৃতমানের

1

আমার 405 ত্রুটি পদ্ধতিটি মঞ্জুরিপ্রাপ্ত নয় কারণ আমি ওয়েবএপিআই নিয়ামকটিকে সর্বজনীনভাবে মোছার পদ্ধতিটি তৈরি করতে বাদ দিয়েছিলাম।

এটি খুঁজে পেতে আমার বেশ দীর্ঘ সময় লেগেছে (খুব দীর্ঘ!) কারণ আমি এই ক্ষেত্রে একটি খুঁজে পাওয়া যায়নি ত্রুটিটি আশা করতাম, তাই আমি ভুলভাবে ধরে নিয়েছিলাম যে আমার মোছার পদ্ধতিটি অস্বীকার করা হচ্ছে।

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

একটি সাধারণ ত্রুটি যা আমি জানি তবে এটি অন্য কাউকে কিছু সময় সাশ্রয় করতে পারে।


1

শুধু যোগ করতে। এটি যদি আপনার কনফিগার হয়

config.Routes.MapHttpRoute (
            নাম: "DefaultApi",
            রুটটিম্পলেট: "এপিআই / {নিয়ামক} / {আইডি}",
            ডিফল্ট: নতুন {আইডি = রুটপ্যারামিটার ptionচ্ছিক}

দয়া করে হুগো যেমন বলেছিলেন তেমনই চালিয়ে যান, এবং নিয়ামক পেতে পদ্ধতিতে রুট বৈশিষ্ট্যটি সেট করবেন না, এটি আমার ক্ষেত্রে একটি সমস্যা দিয়েছে।


0

আমার অনুরূপ সমস্যা ছিল কিন্তু পুটের জন্য - অন্য কোনও পরামর্শই আমার পক্ষে কাজ করেনি।

তবে আমি আইডিটির intপরিবর্তে ডিফল্ট ব্যবহার করছিলাম string। যোগ {id:int}রুট আমার সমস্যার সমাধান।

    [Route("api/Project/{id:int}")]
    public async Task<IHttpActionResult> Put(int id, [FromBody]EditProjectCommand value)
    {
       ...
    }

0

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

<httpProtocol>
    <customHeaders>
        <remove name="Access-Control-Allow-Methods" />
        <remove name="Access-Control-Allow-Origin" />
        <remove name="Access-Control-Allow-Headers" />
    </customHeaders>
</httpProtocol>

-1

মুছে ফেলার পদ্ধতিটির শীর্ষে থাকা [এইচটিটিপি পোস্ট] বৈশিষ্ট্যটি এই সমস্যার সমাধান করেছে:

[HttpPost]
public void Delete(int Id)
{
  //Delete logic
}

এটি আপনার পক্ষে কাজ করার কারণ হতে পারে। আমি আগের সংস্করণে ছিলাম, ২০১৩ সালের শুরুর দিকে, তাই বেশ কয়েকটি জিনিস তখন থেকেই ঠিক করা হয়েছে। যদিও এটি আপনার জন্য কাজ করছে তা জেনে খুশি।
ক্রিস

4
এটি সৎ হওয়ার পক্ষে ভাল উত্তর নয়। এই সমস্যাগুলির সমাধান করা লোকেরা মোছার পরিবর্তে পোষ্ট ব্যবহার করছে যাতে এটি কাজ করে না এবং করা উচিত না
আলেকজান্ডার ডার্ক

আমি বিশ্বাস করি এটি কারণ আপনি ক্লায়েন্ট পক্ষের (অনুরোধের url data) পরিবর্তে params( অনুরোধের মূল অংশ) ব্যবহার করছেন ।
থমাস সৌভাজন

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