URL में डॉट्स ASP.NET mvc और IIS के साथ 404 का कारण बनता है


303

मेरे पास एक ऐसी परियोजना है जिसके लिए मेरे URL को पथ में डॉट्स की आवश्यकता है। उदाहरण के लिए मेरे पास एक URL हो सकता है जैसे www.example.com/people/michael.phelps

डॉट वाले URL 404 जेनरेट करते हैं। मेरी रूटिंग ठीक है। अगर मैं डॉट के बिना, माइकलफेल्प्स में गुजरता हूं, तो सब कुछ काम करता है। अगर मैं डॉट जोड़ता हूं तो मुझे 404 त्रुटि मिलती है। नमूना साइट IIS8 एक्सप्रेस के साथ विंडोज 7 पर चल रही है। URLScan नहीं चल रहा है।

मैंने अपने web.config में निम्नलिखित जोड़ने की कोशिश की:

<security>
  <requestFiltering allowDoubleEscaping="true"/>
</security>

दुर्भाग्य से इससे कोई फर्क नहीं पड़ा। मैं सिर्फ एक 404.0 नहीं मिला त्रुटि प्राप्त करते हैं।

यह एक एमवीसी 4 परियोजना है लेकिन मुझे नहीं लगता कि यह प्रासंगिक है। मेरी रूटिंग ठीक काम करती है और मुझे उम्मीद है कि जब तक वे एक डॉट को शामिल नहीं करते हैं, तब तक पैरामीटर हैं।

मुझे क्या कॉन्फ़िगर करने की आवश्यकता है ताकि मैं अपने URL में डॉट्स रख सकूं?


93
विश्वास नहीं कर सकता कि मैंने इस पर इतना समय बिताया। यदि मैं अनुगामी स्लैश जोड़ता हूं तो URL ठीक काम करता है। उदाहरण के लिए, www.example.com/people/michael.phelps/ पर बिना किसी स्लैश के IIS IIS 404 त्रुटि फेंकता है।
मार्क

15
निशान - ऐसा इसलिए है क्योंकि अनुगामी स्लैश के बिना, IIS सोचता है कि यह एक फाइल है जिसे उसे जाना चाहिए और ढूंढना चाहिए। स्लैश जोड़ने से प्रभाव पड़ता है ... यह एक वास्तविक फ़ाइल नहीं है। इसके अतिरिक्त, नीचे दिया गया कॉन्फ़िगरेशन विकल्प IIS को बताता है कि यदि यह फ़ाइल नहीं है, तो इसके बजाय इसे रूट करने का प्रयास करें।
टॉमी

मैं एक ही समस्या आ रहा है के बाद मैं 4 + asp.net 4.5 mvc के लिए अपनी परियोजना को अद्यतन किया।
टेडु मैया

अपने URL में अनुगामी स्लैश को जोड़ने के लिए एक काम के रूप में मैं IIS रिवाइराइट का उपयोग कर रहा हूं।
मार्क

4
यह मेरे लिए काम नहीं करता है। URL "" के साथ ठीक काम करता है। URL के भीतर लेकिन जब यह बहुत अंत में होता है तो यह एक त्रुटि देता है
आर्किडियन

जवाबों:


379

मुझे अपनी साइट के HTTP हैंडलर को संपादित करके यह काम मिला है। मेरी जरूरतों के लिए यह अच्छा काम करता है और मेरे मुद्दे को हल करता है।

मैंने बस एक नया HTTP हैंडलर जोड़ा है जो विशिष्ट पथ मानदंड के लिए दिखता है। यदि अनुरोध मेल खाता है तो इसे सही ढंग से प्रसंस्करण के लिए .NET को भेजा जाता है। मैं इस समाधान से बहुत खुश हूं कि URLRewrite हैक करें या RAMMFAR को सक्षम करें।

उदाहरण के लिए .NET प्रक्रिया के लिए URL www.example.com/people/michael.phelpssystem.webServer / handlers तत्व के भीतर आपकी साइट के web.config में निम्न पंक्ति जोड़ें :

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

संपादित करें

इस मुद्दे का समाधान RAMMFARया अन्य सुझाव हैं RunAllManagedModulesForAllRequests। इस विकल्प को सक्षम करने से सभी अनुरोधों के लिए सभी प्रबंधित मॉड्यूल सक्षम हो जाएंगे। इसका मतलब है कि स्थिर फाइलें जैसे कि इमेज, पीडीएफ और बाकी सभी चीजें .NET द्वारा प्रोसेस की जाएंगी जब उन्हें होने की जरूरत नहीं होगी। जब तक आपके पास इसके लिए कोई विशिष्ट मामला नहीं है, यह विकल्प सबसे अच्छा है।


3
यहाँ एक पूर्ण उदाहरण है stackoverflow.com/a/16607685/801189 इस उत्तर पर आधारित
VB

10
[पथ = "*" के साथ इसे जोड़ने के बाद .css, .js जैसी किसी भी स्थिर फ़ाइलों के लिए सभी अनुरोध विफल हो जाते हैं। मेरे पास एक कस्टम मार्ग है जो यूआरएल को हैंडल करता है जो इस " डोमेन / ABCDE.FGHIJ " की तरह दिखता है । मेरी सभी स्थिर फाइलें मेरे / सामग्री निर्देशिका में हैं। क्या उस संपूर्ण निर्देशिका को इससे बाहर करने का कोई तरीका है? सही काम करने के लिए RAMMFAR की स्थापना, लेकिन मैं उस ओवरहेड से बचना चाहूंगा।
लैमरेंट

2
स्थानीय IIS स्लैश शुरू करने के साथ काम करता है, लेकिन IIS8 केवल पहली स्लैश के बिना रूट को समझता है।
पावेल वोरोनिन

2
मैं @lamarant के रूप में एक ही मुद्दा रहा हूँ ... यह स्थिर फ़ाइलों को रोकता है। तुम जानते हो क्यों? यहाँ MVC4 का उपयोग करना।
eestein

3
यह एमवीसी 5 में काम करता है, लेकिन यदि आप पथ की शुरुआत में स्लैश डालते हैं, तो यह तभी काम करता है जब मेजबाननाम के तुरंत बाद पथ (यह ऐप फ़ोल्डर के सापेक्ष नहीं है)। उदाहरण के लिए पथ / लोग / * www.example.com/people/michael.phelps के लिए काम करेंगे, लेकिन www.example.com/app/people/michael.phelps के लिए नहीं। AFAIK ऐप के सापेक्ष पथ बनाने का कोई तरीका नहीं है।
होगन

46

चारों ओर कुछ प्रहार करने के बाद मैंने पाया कि रिलैक्स यूआरएलटीओफाइलसिस्टम मेपिंग ने मेरे लिए बिल्कुल भी काम नहीं किया है, जो मेरे मामले में काम किया है वह RAMMFAR को सच करने के लिए सेट कर रहा है, वही (.net 4.0 + mvc3) और (.net 4.5 + mvc4) के लिए मान्य है।

<system.webserver>
    <modules runAllManagedModulesForAllRequests="true">

RAMMFAR के बारे में जानते हुए भी RAMMFAR के बारे में सही हंसलमैन पोस्ट सेट करें और प्रदर्शन करें


5
RAMMFAR सेट करते समय जागरूक रहें ... अगर मैं इस <मॉड्यूल runAllManagedModulesForAllRequests = "true"> का उपयोग करता हूं तो क्या कोई प्रदर्शन हानि है
Shanker Paudel

1
मूल पोस्टर के मामले में इसकी आवश्यकता नहीं होनी चाहिए, क्योंकि वह IIS7 और इसके बाद के संस्करण का उपयोग कर रहा है। यह डिफ़ॉल्ट है और RAMMFAR को सेट करना वास्तव में आपको एक्सटा की लागत है। देखें msdn.microsoft.com/en-us/library/...
रिचर्ड

हालांकि यह उपयोगी है, यह मेरे लिए MVC5 / IIS7 में 404s को रोकने के लिए अवधि प्राप्त करने के लिए पर्याप्त नहीं था।
१०:३६ पर क्रिस मोसचिनी

बस फिर से करने के लिए। आप इस विकल्प को चालू करने से बचना चाहते हैं
स्ट्रेके

यदि संभव हो तो एक लाइव साइट पर ऐसा न करें।
NickG

27

मेरा मानना ​​है कि आपको अपने web.config में संपत्ति को आराम से UUTToFileSystemMapping सेट करना होगा। हाक ने कुछ समय पहले इस बारे में एक लेख लिखा था (और कुछ अन्य एसओ पोस्ट भी इसी प्रकार के प्रश्न पूछ रहे हैं )

<system.web>
<httpRuntime relaxedUrlToFileSystemMapping="true" />

नीचे दिए गए टिप्पणियों से संपादित करें , .NET / IIS के बाद के संस्करणों को इस system.WebServerतत्व में होने की आवश्यकता हो सकती है ।

<system.webServer>
<httpRuntime relaxedUrlToFileSystemMapping="true" />

2
यही मैं mvc3 + .net4.0 के साथ था और खूबसूरती से काम किया, लेकिन mvc4 + .net4.5 के साथ अब और काम न करें।
तेदु मइया

4
मैंने बिना किसी सफलता के रिलैक्सUrlToFileSystemMapping की कोशिश की। मुझे नहीं लगता कि यह MVC के नवीनतम संस्करणों के साथ काम करता है।
मार्क

इसने मुझे url /WEB-INF./web.xml को पकड़ने और एक कस्टम त्रुटि पृष्ठ पर पुनर्निर्देशित करने की अनुमति दी जब मैंने बहुत सारे अन्य तरीकों से काम नहीं किया।
क्वेंटिन-स्टारिन

3
दिलचस्प। यह देखते हुए कि यह आपके लिए काम नहीं कर रहा था, मैं यह मानने वाला था कि यह मेरे लिए काम नहीं करेगा ... मैं MVC4 पर .NET4.5 के साथ हूं। लेकिन बिंगो, यह वैसे भी काम करता था। मेरे मामले में मेरे पास बस एक अवधि वाला URL था "।" अंतिम पात्र के रूप में। मुझे 404 मिल रहे थे, लेकिन यह तय हो गया।
पांडावुड

क्या उसके पास सुरक्षा के नतीजे हैं?
पेसानो २२

23

मैं बिना किसी लाभ के सभी विभिन्न उपायों का पालन करते हुए इस मुद्दे पर लंबे समय तक अटक गया।

मैंने देखा कि डॉट्स वाले URL के अंत में एक फॉरवर्ड स्लैश [/] जोड़ते समय [।], इसने 404 त्रुटि नहीं डाली और यह वास्तव में काम कर गया।

मैंने आखिरकार एक विशेष पैटर्न को देखने के लिए IIS URL रिवाइराइट जैसे URL रीराइट का उपयोग करके समस्या को हल किया और प्रशिक्षण स्लैश को जोड़ा।

मेरा URL इस तरह दिखता है: /Contact/~firstname.lastname इसलिए मेरा पैटर्न बस है: /Contact/~(.*।

मुझे स्कॉट फोर्सिथ से यह विचार मिला, नीचे लिंक देखें: http://weblogs.asp.net/owscott/handing-mvc-paths-with-dots-in-the-path


यह मेरे लिए (MVC5) काम करता है। ऊपर दिए गए अन्य सुझाव काम नहीं आए, और जरूरत नहीं थी, बस एक अनुगामी स्लेश। मैं यहाँ @ jonduncan05 द्वारा सुझाए गए मार्गों को बदलूंगा ।
मार्कौ

धन्यवाद, लियोन। मेरे लिए दिन बचा लिया। सभी web.config के सामान के बारे में निश्चित नहीं है कि लोग इधर-उधर की बातें कर रहे हैं, लेकिन अनुगामी जोड़ना / मुझे वह उत्तर चाहिए जो मुझे चाहिए था। मेरे मामले में, मेरे पास सर्वर-साइड नियंत्रक पर नियंत्रण है, और जावास्क्रिप्ट जो इसे बुला रहा था, इसलिए मैंने अभी जावास्क्रिप्ट और वॉइला को अपडेट किया है!
मेंढक Pr1nce

21

बस इस अनुभाग को Web.config में जोड़ें, और मार्ग / {* pathInfo} के सभी अनुरोधों को निर्दिष्ट हैंडलर द्वारा नियंत्रित किया जाएगा, तब भी जब pathInfo में डॉट्स हों। (ServiceStack MVC होस्ट Web.config उदाहरण से लिया गया और यह उत्तर https://stackoverflow.com/a/12151501/801189 )

यह IIS 6 & 7. दोनों के लिए काम करना चाहिए। आप '' जोड़ें '' तत्वों को संशोधित करके 'मार्ग' के बाद अलग-अलग रास्तों पर विशिष्ट हैंडलर दे सकते हैं।

  <location path="route">
    <system.web>
      <httpHandlers>
        <add path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" />
      </httpHandlers>
    </system.web>
    <!-- Required for IIS 7.0 -->
    <system.webServer>
      <modules runAllManagedModulesForAllRequests="true" />
      <validation validateIntegratedModeConfiguration="false" />
      <handlers>
        <add name="ApiURIs-ISAPI-Integrated-4.0" path="*" type="System.Web.Handlers.TransferRequestHandler" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" preCondition="integratedMode,runtimeVersionv4.0" />
      </handlers>
    </system.webServer>
  </location>

2
प्रदर्शन के परिणामों से सावधान रहें ।AllManagedModulesForAllRequests (RAMMFAR) है। यह हर अनुरोध के लिए सभी प्रबंधित मॉड्यूल को सक्षम करेगा। स्थिर फाइलें, जैसे कि छवियाँ, सीधे IIS द्वारा संसाधित की जा सकती हैं, लेकिन यह उन्हें हर अनुरोध पर ओवरहेड को जोड़ने वाले प्रत्येक मॉड्यूल के माध्यम से संसाधित करता है।
मार्क

@निशान। हां, लेकिन मेरा मानना ​​है कि यह केवल रूट / ... के लिए अनुरोध को प्रभावित करेगा यदि हम <स्थान> अनुभाग का उपयोग करते हैं और मुख्य <system.webServer> अनुभाग में runAllManagedModulesForAllRequests सेट नहीं करते हैं।
VB

@VB मुझे लगता है कि बस हैंडलर पर्याप्त है, जब तक कि आपके पास उस सिस्टम पर फाइलें नहीं हैं जो एक URL से मेल खाता है जो .NET प्रक्रिया के लिए है। और किसी कारण से, RAMMFAR ने <स्थान> स्तर पर काम नहीं किया, लेकिन हैंडलर समाधान ने किया।
webXL

@webXL <स्थान> की आवश्यकता तब होती है जब आप MVC को किसी निर्दिष्ट मार्ग पर अनुरोधों को संसाधित करने और मार्गों को जोड़ने के लिए नहीं चाहते हैं ।gnoreRoute ("मार्ग / {* pathInfo}"); फिर IIS स्थान अनुभाग <स्थान पथ = "मार्ग"> में दिखेगा और स्थान अनुभाग में निर्दिष्ट हैंडलर का उपयोग करेगा, लेकिन यह पूरी तरह से MVC के मार्ग और अन्य MVC के पाइपलाइन चरणों को बायपास करेगा। मेरे प्रोजेक्ट में, ServiceStack api बस उस सेटअप के बिना काम नहीं करता है।
VB

बस हैंडलर का काम क्यों नहीं जोड़ा जाएगा? मेरे मामले में, मुझे हैंडलर के साथ RAMMFAR जोड़ना होगा। यहाँ कुछ अच्छे स्पष्टीकरण की तलाश है। :)
आदित्य पाटिल

6

MVC 5.0 वर्कअराउंड।

सुझाए गए कई जवाब एमवीसी 5.0 में काम नहीं करते हैं।

चूँकि पिछले भाग में 404 डॉट समस्या को हल करने वाले स्लैश के साथ उस अनुभाग को बंद करके हल किया जा सकता है, यहाँ मैं थोड़ा चाल का उपयोग करता हूं, स्वच्छ और सरल।

आपके विचार में सुविधाजनक प्लेसहोल्डर रखते हुए:

@Html.ActionLink("Change your Town", "Manage", "GeoData", new { id = User.Identity.Name }, null)

काम पूरा करने के लिए थोड़ा jquery / जावास्क्रिप्ट जोड़ें:

<script>
    $('a:contains("Change your Town")').on("click", function (event) {
        event.preventDefault();
        window.location.href = '@Url.Action("Manage", "GeoData", new { id = User.Identity.Name })' + "/";
    });</script>

कृपया ध्यान दें कि ट्रेलिंग स्लैश, जो बदलने के लिए जिम्मेदार है

http://localhost:51003/GeoData/Manage/user@foo.com

में

http://localhost:51003/GeoData/Manage/user@foo.com/

5

उन लोगों के लिए सुपर आसान उत्तर जो केवल एक वेबपेज पर हैं। इसके अंत में अपना एक्शनलिंक और एक + "/" संपादित करें।

  @Html.ActionLink("Edit", "Edit", new { id = item.name + "/" }) |

यह मेरे लिए हल! सरल और सुरुचिपूर्ण! सबसे अधिक परेशान यह है कि यह विकास के दौरान विंडोज 10 पर '/' के बिना काम करता है, लेकिन विंडोज 2012 के लिए इसकी आवश्यकता प्रतीत होती है।
दस ब्रिंक

2

आप पीरियड्स के बजाय डैश का इस्तेमाल करने के बारे में सोचना चाहेंगी।

में प्रो एएसपी MVC 3 फ्रेमवर्क वे अनुकूल यूआरएल बनाने के बारे में इस सुझाव देते हैं:

प्रतीकों, कोड और चरित्र अनुक्रम से बचें। यदि आप एक शब्द विभाजक चाहते हैं, तो डैश (/ my-great-article) का उपयोग करें। अंडरस्कोर अप्रयुक्त हैं, और URL-एन्कोडेड रिक्त स्थान विचित्र हैं (/ मेरा + महान + लेख) या घृणित (/ मेरा% 20great% 20article)।

इसमें यह भी उल्लेख किया गया है कि URL को मनुष्यों के लिए पढ़ना और बदलना आसान होना चाहिए। शायद डॉट के बजाय डैश का उपयोग करने के बारे में सोचने का कारण भी उसी पुस्तक से आता है:

HTML पेज (.aspx या .mvc) के लिए फ़ाइल नाम एक्सटेंशन का उपयोग न करें, लेकिन विशेष फ़ाइल प्रकारों के लिए उनका उपयोग न करें .jpg, .pdf, .zip, आदि)। यदि आप MIME प्रकार को उचित रूप से सेट करते हैं, तो वेब ब्राउज़र फ़ाइल नाम एक्सटेंशन की परवाह नहीं करते हैं, लेकिन मानव अभी भी पीडीएफ फाइलों को पीडीएफ के साथ समाप्त होने की उम्मीद करते हैं।

इसलिए जबकि एक अवधि अभी भी मनुष्यों के लिए पठनीय है (हालांकि डैश से कम पठनीय है, IMO), यह अभी भी थोड़ा भ्रामक / भ्रामक हो सकता है जो इस अवधि के बाद आता है। अगर किसी के पास जिप का अंतिम नाम है तो क्या होगा? फिर URL / John-zip के बजाय /John.zip होगा, कुछ ऐसा जो एप्लिकेशन को लिखने वाले डेवलपर के लिए भी भ्रामक हो सकता है।


यह एक उपयोगकर्ता नाम या अन्य क्षेत्र की संभावना है जिसमें स्वाभाविक रूप से डॉट्स शामिल हैं। उस ने कहा, StackOverflow .अपने उपयोगकर्ता के यूआरएल में डैश के साथ सभी विराम चिह्न (सहित ) को प्रतिस्थापित करता है: P
jli

मुझे इसका सामना करना पड़ा क्योंकि मेरे पास सुरक्षित फ़ाइल पुनर्प्राप्ति सेवा है जिसमें स्पष्ट रूप से मार्ग पैरामीटर में फ़ाइल नाम शामिल हैं ...
फ्लेवरस्केप

स्पष्ट कारण के लिए अस्वीकृत: यह सवाल का जवाब नहीं देता है। यदि मैं कर सकता था, तो मैं अपने URL में अवधियों को प्रकट नहीं होने देता। वे दिखाई देते हैं, क्योंकि URL जनरेट किया गया है और मानव-पठनीय होना चाहिए।
mg30rg

2

आपके लिए यह महत्वपूर्ण है कि आपके यूआरआई को बिना क्लेरीस्ट्रेस के रखना कितना महत्वपूर्ण है, आप भी केवल क्वेरिस्ट्रिंग के हिस्से के रूप में डॉट्स के साथ मान को पास कर सकते हैं, यूआरआई को नहीं।

उदाहरण के लिए www.example.com/people?name=michael.phelps बिना किसी सेटिंग या किसी चीज़ को बदलने के काम करेगा।

आप एक स्वच्छ URI होने की लालित्य खो देते हैं, लेकिन इस समाधान को किसी भी सेटिंग या हैंडलर को बदलने या जोड़ने की आवश्यकता नहीं है।


1

क्या आपके URL संरचना को बदलना संभव होगा?
मैं जिस पर काम कर रहा था उसके लिए मैंने एक मार्ग की कोशिश की

url: "Download/{fileName}"

लेकिन यह कुछ भी है कि एक के साथ विफल रहा था। इस में।

मैंने मार्ग बदल दिया

    routes.MapRoute(
        name: "Download",
        url:  "{fileName}/Download",
        defaults: new { controller = "Home", action = "Download", }
    );

अब मैं इसमें डाल सकता हूं localhost:xxxxx/File1.doc/Downloadऔर यह ठीक काम करता है।

देखने में मेरे मददगार भी उस पर चढ़ गए

     @Html.ActionLink("click here", "Download", new { fileName = "File1.doc"})

जो localhost:xxxxx/File1.doc/Downloadप्रारूप के साथ लिंक भी बनाता है ।

शायद तुम तो अपनी संपत्ति पीछे के साथ समाप्त कर सकते हैं अपने मार्ग के अंत पर "/ दृश्य" या कार्रवाई की तरह एक अनावश्यक शब्द डाल सकता है /की तरह कुछ/mike.smith/view


1

यह पथ बदलने के समान सरल है "" । to path = " "। Web.config में केवल ExensionlessUrlHandler-4.0 के लिए पथ में डॉट निकालें।

यहाँ एक अच्छा लेख है https://weblog.west-wind.com/posts/2015/Nov/13/Serves-URLs-with-File-Extensions-in-an-ASPNET-MVC-Application


इस लिंक ने मुझे मेरे मुद्दे का सबसे अच्छा समाधान करने के लिए प्रेरित किया (खंड में एक "" चरित्र है) लेकिन क्लाइंट "/" के साथ ट्रेल नहीं करेगा। Web.config के <system.webServer> में इस लाइन के होने से फिक्स्ड - <मॉड्यूल runAllManagedModulesForAllRequests = "true" />
NickBeaugié

1

ऊपर दिए गए सभी समाधानों की कोशिश की, लेकिन उनमें से किसी ने भी मेरे लिए काम नहीं किया। मैंने क्या काम किया था। मैं इसके सभी बहुभाषी संस्करणों सहित .NET संस्करणों> ४.५ की स्थापना रद्द कर रहा था; आखिरकार मैंने नए (केवल अंग्रेजी) संस्करणों को टुकड़ा से जोड़ा। अभी मेरे सिस्टम पर स्थापित संस्करण यह है:

  • 2.0
  • 3.0
  • ३.५ ४
  • 4.5
  • 4.5.1
  • 4.5.2
  • 4.6
  • 4.6.1

और इसके अभी भी इस बिंदु पर काम कर रहा है। मैं 4.6.2 स्थापित करने से डरता हूं क्योंकि यह सब कुछ गड़बड़ कर सकता है।

इसलिए मैं केवल अनुमान लगा सकता था कि 4.6.2 या उन सभी गैर-अंग्रेजी संस्करणों ने मेरे कॉन्फ़िगरेशन को गड़बड़ कर दिया था।


0

मैं इस समस्या के अपने विशेष संस्करण को हल करने में सक्षम था ( https://cackoverflow.com/a/13082446/1454265 , और प्रतिस्थापन पथ पर समाधान का उपयोग करके / ग्राहक को मार्ग / ग्राहक बनाने के लिए मार्ग, स्लैगिंग की अनुमति नहीं थी)। = "*। html"।


0

जैसा कि समाधान भी एक प्रारूप में एन्कोडिंग पर विचार किया जा सकता है जिसमें .बेस 64 के रूप में प्रतीक शामिल नहीं है ।

Js में जोड़ा जाना चाहिए

btoa(parameter); 

नियंत्रक में

byte[] bytes = Convert.FromBase64String(parameter);
string parameter= Encoding.UTF8.GetString(bytes);

0

Web.config संग्रह में URL पुनर्लेखन नियम जोड़ें। आपको IIS में पहले से इंस्टॉल किया गया URL Rewrite मॉड्यूल होना चाहिए । निम्नलिखित पुनर्लेखन नियम का उपयोग अपने लिए प्रेरणा के रूप में करें।

<?xml version="1.0" encoding="utf-8"?>
<configuration>

<system.webServer>
  <rewrite>
    <rules>
      <rule name="Add trailing slash for some URLs" stopProcessing="true">
        <match url="^(.*(\.).+[^\/])$" />
          <conditions>
              <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
              <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Redirect" url="{R:1}/" />
      </rule>
    </rules>
    </rewrite>
</system.webServer>

</configuration> 

0

इसके अलावा, (संबंधित) अपने हैंडलर मैपिंग के आदेश की जांच करें। हमारे पास एक .svc (जैसे /foo.asmx/bar.svc/path) पथ के साथ एक .ashx था। .Svc पाथ के लिए .svc मैपिंग पहले 404 थी। जो कि .asmx से पहले मेल खाता था। बहुत ज्यादा नहीं सोचा था, लेकिन शायद रास्ते को उकसाना होगा इस का ख्याल रखना होगा।


-3
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace WebApplication1.Controllers
{
    [RoutePrefix("File")]
    [Route("{action=index}")]
    public class FileController : Controller
    {
        // GET: File
        public ActionResult Index()
        {
            return View();
        }

        [AllowAnonymous]
        [Route("Image/{extension?}/{filename}")]
        public ActionResult Image(string extension, string filename)
        {
            var dir = Server.MapPath("/app_data/images");

            var path = Path.Combine(dir, filename+"."+ (extension!=null?    extension:"jpg"));
           // var extension = filename.Substring(0,filename.LastIndexOf("."));

            return base.File(path, "image/jpeg");
        }
    }
}

1
यह ओपी के सवाल का जवाब कैसे देता है? कृपया यह वर्णन करते हुए मन?
kayess

यह एक समाधान नहीं है, यह एक हैक है जिसे फ़ाइल एक्सटेंशन को uri पथ (एक अवधि के बिना) में रखने की आवश्यकता है जैसे "~ / छवि / jpg / गाय" फ़ाइल को पुनः प्राप्त करने के लिए "/ app_data / images / cow / jpg" - - इस आदमी का समाधान नहीं है और बाकी सभी को इसकी जरूरत है।
शॉन विल्सन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.