2012-11-15 21 views
8

डिफ़ॉल्ट वेब एपीआई मार्गवेबएपीआई मार्ग 404 के है जब वहाँ URL में पीछे अंतरिक्ष

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

और एक नियंत्रक के साथ

public class TestController : ApiController 
{ 
    [HttpGet] 
    public HttpResponseMessage Get(string id) 
    { 
     return Request.CreateResponse(HttpStatusCode.OK, id); 
    } 
} 

एक अनुरोध करने के लिए 'api/test/1'

रिटर्न 1

अगर किसी कारण से आपपर अनुरोध भेजते हैं

मार्ग 404 के।

अब इस उदाहरण मूर्खतापूर्ण लग सकता है के बाद से ब्राउज़रों पीछे वाले स्पेस ट्रिम, लेकिन

तरह 'api/{controller}/{id}/{extrastuff}'

'1 ' में अंतरिक्ष '1%20' बदल जाएगा एक मार्ग और अनुरोध 404 होगा मार्ग पर नहीं पाए जाने के लिए

उत्तर

26

आपकी समस्या का वेबैपी के साथ कुछ लेना देना नहीं है, लेकिन Asp.Net कुछ विशिष्ट यूआरएल कैसे संभालता है। और Asp.Net इन यूआरएल को बहुत ही भयानक तरीके से संभालता है, इसलिए आपको इसे to relax बताना होगा।

system.web के तहत अपने web.config को यह पंक्ति जोड़ दें:

इसके अलावा पर एसओ:

<httpRuntime relaxedUrlToFileSystemMapping="true" /> 

आपके पास इस विषय के बारे में अधिक पढ़ सकते हैं

+0

मूर्खतापूर्ण लगता है कि एक मार्ग MVC इंजन होगा यह सेट डिफ़ॉल्ट रूप से गलत पर है जब एमवीसी का एक बड़ा लाभ यूआरएल फाइल सिस्टम से संबंधित नहीं है। – Steve

+1

यह रूटिंग इंजन का निर्णय नहीं है, यह बहुत ही मूल पर एएसपी.NET है जो इसके ऊपर बनाए गए सब कुछ की रक्षा करता है। तो सावधान रहें यदि आप इसे बदलते हैं कि आप उस बिंदु पर अपने आवेदन के तहत सब कुछ के लिए नियमों को आराम दे रहे हैं। –

+1

यह ऐप को क्रैश करता है जैसे ही मैं इसे – Dan

0

संचालकों को यह जोड़े

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