दिलचस्प पोस्ट
ASP.NET MVC प्रदर्शन सत्र चर तक कैसे पहुंचें और उन्हें जावास्क्रिप्ट में सेट करें? हार्ड डिस्क विफलता से क्षतिग्रस्त गीट ऑब्जेक्ट कैसे ठीक करें? कैसे वर्णमाला क्रम के बाद स्ट्रिंग की लंबाई से सॉर्ट करने के लिए? डॉकर में पर्यवेक्षक का उपयोग हायफन (-) चरित्र से शुरू होने वाली फाइल नाम के साथ मैं कैसे काम कर सकता हूं? कई प्रक्रियाओं के बीच परिणाम कतार साझा करना अंगुलम में प्रोग्राम घटक को कैसे जोड़ूं? डार्ट? स्ट्रिंग लीटरल्स को गैर प्रकार के टेम्प्लेट पैरामीटर के रूप में अनुमति नहीं है कैसे सी कार्यक्रम में तारीख और समय मूल्य प्राप्त करने के लिए रेल 4 में स्वत: लोड हो रहा है लिब फ़ाइलें कॉवरियन एंड कॉन्ट्रा-विरेंस के बीच का अंतर बिल्ड त्रुटि – फ़ाइल में आवश्यक आर्किटेक्चर i386 गुम है सी / सी ++ में एक DLL संकलित करें, फिर उसे किसी अन्य प्रोग्राम से कॉल करें एक स्थिर std :: नक्शा <int, int> सी ++ में शुरू कर रहा है

डॉट वर्ण '।' अनुरोध के लिए एमवीसी वेब एपीआई 2 में जैसे कि एपीआई / लोक / एसटीएएफएफ .45287

यूआरएल मैं काम करने की कोशिश कर रहा हूं: http://somedomain.com/api/people/staff.33311 (बस की तरह साइटों की तरह है। एफएम अपने सभी आराम और वेबपेज यूआरएल में सभी प्रकार के संकेतों की अनुमति देता है , उदाहरण के लिए " http://www.last.fm/artist/psy'aviah " अंतिम के लिए एक मान्य यूआरएल है। एफएम)।

क्या काम करता है परिदृश्यों का अनुसरण कर रहे हैं: – http://somedomain.com/api/people/ – जो सभी लोगों को देता है – http://somedomain.com/api/people/staff33311 – के रूप में अच्छी तरह से काम करेगा, लेकिन यह नहीं है कि मैं क्या ' मी के बाद यूआरएल को "डॉट" स्वीकार करना चाहूंगा, जैसे नीचे दिए गए उदाहरण – http://somedomain.com/api/people/staff.33311 – लेकिन यह मुझे देता है

HTTP Error 404.0 - Not Found The resource you are looking for has been removed, had its name changed, or is temporarily unavailable. 

मैंने निम्नलिखित चीजों को स्थापित किया है:

  1. नियंत्रक "लोगकंट्रोलर"

     public IEnumerable<Person> GetAllPeople() { return _people; } public IHttpActionResult GetPerson(string id) { var person = _people.FirstOrDefault(p => p.Id.ToLower().Equals(id.ToLower())); if (person == null) return NotFound(); return Ok(person); } 
  2. WebApiConfig.cs

     public static void Register(HttpConfiguration config) { // Web API configuration and services // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); } 

मैंने इस ब्लॉगपोस्ट http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx के सभी सुझावों का पालन करने की कोशिश की है लेकिन यह अभी भी काम नहीं करेगा .. मुझे यह भी लगता है कि यह काफी कठिन है और मुझे आश्चर्य है कि अगर कोई दूसरा नहीं है, बेहतर और सुरक्षित तरीके से

हमारे पास हमारे आईडी का आंतरिक रूप से ऐसा है, इसलिए हम डॉट को किसी एक या किसी अन्य रूप में फिट करने का समाधान ढूंढने वाले हैं, खासकर "।" लेकिन यूआरएल के लिए वैकल्पिक सुझावों के लिए खुली हूँ अगर जरूरत है …

वेब के समाधान से एकत्रित समाधान "डॉट वर्ण '।' अनुरोध के लिए एमवीसी वेब एपीआई 2 में जैसे कि एपीआई / लोक / एसटीएएफएफ .45287"

आपकी web.config फ़ाइल में सेटिंग के बाद आपकी समस्या को ठीक करना चाहिए:

 <configuration> <system.webServer> <modules runAllManagedModulesForAllRequests="true" /> 

http://somedomain.com/api/people/staff.33311/ स्थान पर एक स्लैश जैसे http://somedomain.com/api/people/staff.33311/ साथ URL को लागू करें

मुझे नहीं पता कि मैं वास्तव में क्या कर रहा हूं, लेकिन पिछली उत्तर के साथ खेलने के बाद थोड़ा सा मैं एक और, शायद अधिक उपयुक्त समाधान के साथ आया हूं:

 <system.webServer> <modules> <remove name="UrlRoutingModule-4.0" /> <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" /> </modules> </system.webServer> 

मैंने पाया है कि मानक ExtensionlessUrlHandler मेरे लिए इस मुद्दे को हल करने से पहले निम्नलिखित जोड़ना :

 <add name="ExtensionlessUrlHandler-Integrated-4.0-ForApi" path="api/*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 

मुझे नहीं लगता कि नाम वास्तव में इससे बहुत मायने रखता है, सिवाय इसके कि यह आपकी आईडीई (मेरे मामले में विजुअल स्टूडियो) आपकी साइट कॉन्फ़िगरेशन का प्रबंधन कर रहा है, संभवतः इससे मदद करता है

एच / टी से https://stackoverflow.com/a/15802305/264628

मुझे पता चला कि मुझे बस runAllManagedModulesForAllRequests सेट सभी runAllManagedModulesForAllRequests लिए सभी के लिए true करने की जरूरत true । मुझे यह भी सुनिश्चित करना था कि एक्सटेंशनलेस यूआरएल हैंडलर को सभी पथों को देखने के लिए कॉन्फ़िगर किया गया। इसके अतिरिक्त, एक और बोनस कॉन्फ़िगरेशन सेटिंग है जो आप जोड़ सकते हैं जो कुछ मामलों में मदद करेगा। यहां मेरा काम Web.config है:

 <system.web> <httpRuntime relaxedUrlToFileSystemMapping="true" /> </system.web> <system.webServer> <modules runAllManagedModulesForAllRequests="true" /> <handlers> <remove name="WebDAV" /> <remove name="OPTIONSVerbHandler" /> <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> </system.webServer> 

ध्यान दें, विशेष रूप से, कि ExtensionlessUrlHandler-Integrated-4.0 पास इसके path विशेषता को सेट किया गया है * के विपरीत (उदाहरण के लिए)।

मुझे पता चला कि दोनों तरह से मेरे लिए काम करता है: या तो सभी सेटिंग सभी AllManagedModulesForAllRequests को सही करने के लिए सेट करते हैं या निम्नलिखित के रूप में ExtentionlessUrlHandler को जोड़ें। आखिर में मैं एक्सटेंशन युआरएलहैंडलर को चुनने के लिए चुनता हूं क्योंकि रनएल्म मैनेजमेंट मॉड्यूलफॉरएल्डर्यूज के पास साइट पर प्रदर्शन प्रभाव होता है।

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

मुझे एक ही समस्या और परिस्थितियों का सामना करना पड़ा जहां मैं आईआईएस और वेबसाइट कॉन्फ़िग से संबंधित सेटिंग्स के साथ खेलना नहीं था। इसलिए मुझे इसे केवल कोड स्तर पर बदलाव करके ही काम करना पड़ा।

सरल बात यह है कि सबसे आम बात यह है कि जहां यूआरएल में डॉट कैरेक्टर होता है, जब आप यूज़र से कुछ इनपुट प्राप्त करते हैं और एक्शन विधि में पैरामीटर के लिए कुछ तर्क पास करने के लिए इसे क्वेरी स्ट्रिंग या यूआरएल टुकड़ा के रूप में पास करते हैं अपने नियंत्रक की

 public class GetuserdetailsbyuseridController : ApiController { string getuserdetailsbyuserid(string userId) { //some code to get user details } } 

यूआरएल पर एक नजर डालें जहां उपयोगकर्ता अपना व्यक्तिगत आईडी प्राप्त करने के लिए अपने उपयोगकर्ता आईडी में प्रवेश करता है:

 http://mywebsite:8080/getuserdetailsbyuserid/foo.bar 

चूंकि आपको बस सर्वर से कुछ डेटा प्राप्त करना है, इसलिए हम GET क्रिया का उपयोग करते हैं। GET कॉल का उपयोग करते हुए किसी भी इनपुट पैरामीटर को केवल यूआरएल के टुकड़ों में ही पारित किया जा सकता है।

इसलिए मेरी समस्या को हल करने के लिए मैंने अपनी कार्रवाई के http क्रिया को POST बदल दिया। एचटीपी POST क्रिया में किसी भी उपयोगकर्ता या गैर-उपयोगकर्ता इनपुट को शरीर में भी पास करने की सुविधा है। इसलिए मैंने एक JSON डेटा बनाया और इसे http POST अनुरोध के शरीर में पारित किया:

 { "userid" : "foo.bar" } 

नीचे अपनी विधि परिभाषा बदलें:

 public class GetuserdetailsbyuseridController : ApiController { [Post] string getuserdetailsbyuserid([FromBody] string userId) { //some code to get user details } } 

नोट : GET क्रिया का उपयोग कब और कब POST क्रिया का उपयोग करने के बारे में अधिक।