2012-11-20 13 views
5

मेरे पास एल्माह के साथ एक एमवीसी 4 परियोजना है। मेरे Global.asax के Application_Start() हैएमवीसी 4 वेबएपीआई कॉन्फ़िगरेशन में किसी रूट को अनदेखा कैसे करें?

WebApiConfig.Register(GlobalConfiguration.Configuration); // #1 
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
RouteConfig.RegisterRoutes(RouteTable.Routes); // #2 

# 1 और # 2 के रूप में

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "{controller}/{action}/{id}", 
      defaults: new { id = RouteParameter.Optional }); 
    } 
    ... 
} 

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

टेम्पलेट्स समान हैं और नियंत्रकों में मार्ग वास्तव में काम करता है एक URI कल्पना से हम यह चाहते हैं (इस प्रकार हैं परिप्रेक्ष्य)। मुद्दा यह है कि वेबएपीआई मार्ग जोड़े जाने के बाद अनदेखा मार्ग जोड़ा जाता है। इसलिए एमवीसी 4 एस द्वारा रूटिंग और एल्मा द्वारा नियंत्रित किया जाना चाहिए (उदाहरण के लिए /elmah.axd/styles) को इसके बजाय वेबएपीआई द्वारा अवरुद्ध किया गया है और अनुरोध विफल रहता है => इसलिए मेरे elmah.axd पृष्ठों में कोई सीएसएस नहीं है। मैंने ग्लोबल.एक्सएक्स में # 1 और # 2 फिसलने की कोशिश की लेकिन इससे सभी वेबएपीआई रूटिंग विफल हो गईं - एफएआर सीएसएस से भी बदतर एल्मा में काम नहीं कर रहा है!

मुझे मूल रूप से पहले मार्ग के रूप में {resource}.axd/{*pathInfo} को अनदेखा करने के लिए WebAPI के रूटिंग को निर्देशित करने के लिए कुछ तरीकों की आवश्यकता है - मैं यह कैसे कर सकता हूं?

+0

आपका वेब एपीआई DefaultApi मार्ग अजीब लग: 'अन्यथा MVC और वेबएपीआई मार्गों का उल्लंघन करेगा" API/{नियंत्रक}/{कार्रवाई}/{आईडी} ",: यह' routeTemplate की तरह कुछ किया जाना चाहिए। क्या आपने नियमित नियंत्रक का परीक्षण किया है और एपीआई नियंत्रक आपके लिए काम कर रहे हैं? – nemesv

+0

मैंने विशेष रूप से 'एपीआई' उपसर्ग को हटा दिया क्योंकि इससे हमारे प्रकाशित यूआरआई खराब हो जाएंगे। एमवीसी और वेबएपीआई नियंत्रक दोनों ठीक काम करते हैं - पहले वेबएपीआई नियंत्रकों की खोज की जाती है, फिर एमवीसी नियंत्रकों की खोज की जाती है (क्योंकि यह कॉन्फ़िगरेशन सेट करने का मेरा आदेश है) – DeepSpace101

+1

config.Routes.IgnoreRoute ("{resource} .axd/{* pathInfo} "); WebApiConfig कक्षा में, विधि रजिस्टर करें। या तुमने कोशिश की? – Regfor

उत्तर

8

यह वही हमारे लिए काम किया है - आवरण से बाहर है और के रूप में की अनदेखी चलती पहले वाला।

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     //ignore route first 
     RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     WebApiConfig.Register(GlobalConfiguration.Configuration); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     // And taken out of the call below 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
    } 
+0

ऐसा लगता है कि यह वेबएपी पंजीकरण करने से पहले रूट कॉन्फ़िगरेशन स्थापित करने के तथ्य के कारण काम करता है। क्या आप यहां क्या हो रहा है इस बारे में अधिक जानकारी दे सकते हैं? – tam

2

लगता है जैसे आपको रूट परिभाषाओं के क्रम के बेहतर नियंत्रण की आवश्यकता है। व्यक्तिगत RouteConfig और WebApiConfig वर्गों से इन खींच के बजाय, आप तो जैसे global.asax.cs में इन सीधे निर्धारित कर सकते हैं:

RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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

RouteTable.Routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 
+1

मैंने पहले ही पोस्ट करने से पहले कोशिश की थी: 'मैंने ग्लोबल.एक्सएक्स में # 1 और # 2 फिसलने की कोशिश की लेकिन इससे सभी वेबएपीआई रूटिंग विफल हो गईं - एफएआर सीएसएस से भी बदतर एल्मा में काम नहीं कर रहा है!' – DeepSpace101

+0

आह, तुम सही हो! मैंने इस मुद्दे को ठीक करने के लिए अपना जवाब अपडेट कर लिया है। –