2012-07-13 12 views
56

मेरे पास एक WP7 गेम है जो मेरे एमवीसी 4 रीस्टफुल सर्वर के साथ संवाद करने के लिए RESTsharp का उपयोग करता है, लेकिन मुझे अक्सर काम करने वाले अनुरोध करने में समस्याएं होती हैं और इसलिए मैं इसे विफल होने पर डीबग करना चाहता हूं।आप एमवीसी 4 एपीआई मार्गों को सर्वश्रेष्ठ कैसे डिबग करते हैं?

यह एक उदाहरण है जहां मेरे GameController पर कन्स्ट्रक्टर हिट है, लेकिन Post विधि हिट नहीं है, और मुझे समझ में नहीं आता क्यों।

क्लाइंट कोड:

public void JoinRandomGame() 
{ 
    client = new RestClient 
    { 
     CookieContainer = new CookieContainer(), 
     BaseUrl = "http://localhost:21688/api/", 
    }; 

    client.Authenticator = GetAuth(); 

    RestRequest request = new RestRequest(Method.POST) 
    { 
     RequestFormat = DataFormat.Json, 
     Resource = "game/" 

    }; 

    client.PostAsync(request, (response, ds) => 
    {}); 
} 

सर्वर कोड:

public void Post(int id) 
    { 
     if (ControllerContext.Request.Headers.Authorization == null) 
     { 
      //No auth 
     } 
     if (!loginManager.VerifyLogin(ControllerContext.Request.Headers.Authorization.Parameter)) 
     { 
      //Failed login 
     } 

     string username; 
     string password; 
     LoginManager.DecodeBase64(ControllerContext.Request.Headers.Authorization.Parameter, out username, out password); 
     gameManager.JoinRandomGame(username); 
    } 

मेरे मार्गों इस

 routes.MapHttpRoute(
      name: "gameAPI", 
      routeTemplate: "api/game/{gameId}", 
      defaults: new 
      { 
       controller = "game", 
       gameId = RouteParameter.Optional 
      }    
     ); 
+2

http://haacked.com/archive/2008/03/13/url-routing-debugger।एएसपीएक्स –

+0

जब मैं एक WP7 एमुलेटर के माध्यम से अपनी रीस्टफुल सेवा तक पहुंचता हूं तो मैं डीबगर जानकारी नहीं देख सकता हूं? – Mech0z

उत्तर

30

RouteDebugger जो मार्गों पता लगाना के लिए अच्छा है/हिट नहीं किया जाएगा।

http://nuget.org/packages/routedebugger

+0

उपर्युक्त टिप्पणियों में पहले ही प्रस्तावित नहीं है, लेकिन मैं नहीं देख सकता कि मुझे यह कैसे कहना चाहिए कि यह गलत कहां है ? http://www.gratisimage.dk/graphic/images/2012/July/13/C044_50005206.jpg यही वह है जो मुझे इसके साथ मिलता है और api/game/{gameId} \t नियंत्रक = गेम, gameId = सामान I पर loookign काम करना चाहिए? – Mech0z

+0

आपके स्क्रीनशॉट के अनुसार, gameId वैकल्पिक नहीं है। GameId सहित आज़माएं और देखें कि क्या यह आपके मार्ग को हिट करता है ... –

+0

ध्यान दें कि आपकी पोस्ट एक्शन वैकल्पिक गेम आईडी स्वीकार नहीं कर सकती है। इसे अनिवार्य बनाने या पैरामीटर को शून्य (int? GameId) बनाने या डिफ़ॉल्ट मान (int gameId = 0) सेट करने पर विचार करें। –

0

GameController ApiController से पाने है की तरह कर रहे हैं? क्या आप वेबएपी का उपयोग कर रहे हैं?

यदि नहीं तो मुझे लगता है कि "/ api /" नई WebApi सुविधा के लिए आरक्षित है। अपने रूटिंग और कंट्रोलर नाम को "gameapi"

पर बदलने का प्रयास करें यदि आप WebApi का उपयोग कर रहे हैं।

फिर yor baseurl से एपीआई हटाने

client = new RestClient 
    { 
     CookieContainer = new CookieContainer(), 
     BaseUrl = "http://localhost:21688/", 
    }; 
+0

हां, मैं इसे काम कर रहा हूं, लेकिन जब मेरे पास कुछ काम नहीं करता है तो मैं इसे करने का एक अच्छा तरीका नहीं समझ सकता लेकिन मेरा नियंत्रक इस तरह है http://pastebin.com/qki60LyU – Mech0z

+0

फिर आप रूटडेबगर का उपयोग " फ्लेम एस "लिंक यह मेरे लिंक से वही बात है :) बस इसे अपने पेज पर चलाएं जो WP7 द्वारा उपयोग किया जाता है, इसे ब्राउज़र में करें। इसके अलावा, आप Elmah स्थापित करने के बारे में सोच सकते हैं - http://nuget.org/packages/elmah –

+0

कि बस मुझे एक XML फ़ाइल देता है (वजह अब routedebugger से जानकारी) है और यह भी मैं अपने प्राप्त मारा और जब मैं यह नहीं मेरी पोस्ट (जो ठीक काम करता है) – Mech0z

2

आप ASP.NET वेब एपीआई का डीबगर कोशिश कर सकते हैं। यह वेब एपीआई के लिए लिखा गया है। https://trocolate.wordpress.com/2013/02/06/introducing-asp-net-web-api-route-debugger/ http://nuget.org/packages/WebApiRouteDebugger/

+0

नोट यह पैकेज C# के लिए है। Vb.net का समर्थन नहीं करता है। –

+6

ने कोशिश की। वेब एपीआई के साथ मेरे एएसपी.नेट एमवीसी 5 प्रोजेक्ट के लिए काम नहीं किया। तब मैंने पूरी तरह से अपनी परियोजना को गड़बड़ कर दिया जब मैंने इसे अनइंस्टॉल किया । इसके कई निर्भरता की वजह से यह केवल स्थापित-विचार करें – Rap

+1

यह गड़बड़-अप भी मेरी वेब एपीआई 2 परियोजना -।? क्यों डीबगिंग टूल एक सख्ती से JSON वेब सेवा करने के लिए रेजर, ट्विटर बूटस्ट्रैप और अन्य ऐड-ऑन जोड़ने की जरूरत है करता है फिल Haack के उपकरण बेहतर है, और बहुत कम है। – Dai

69

एक और तरीका है Global.asax.cs में एक ईवेंट हैंडलर जोड़ने के लिए भेजे अनुरोध लेने के लिए और उसके बाद वी.एस. डीबगर में मार्ग मूल्यों को देखो है। इस प्रकार Init विधि ओवरराइड:

public override void Init() 
{ 
    base.Init(); 
    this.AcquireRequestState += showRouteValues; 
} 

protected void showRouteValues(object sender, EventArgs e) 
{ 
    var context = HttpContext.Current; 
    if (context == null) 
     return; 
    var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(context)); 
} 

फिर showRouteValues में एक ब्रेकपाइंट सेट और routeData की सामग्री को देखने।

ध्यान रखें कि एक वेब एपीआई प्रोजेक्ट में, एचटीपी मार्ग WebApiConfig.cs में हैं, RouteConfig.cs नहीं।

+8

त्वरित और गंदे, बस मैं क्या जरूरत! –

+0

यह दर्जनों/सैकड़ों नियंत्रकों के साथ समाधान के लिए स्केल नहीं करता है। –

2

मार्गों का परीक्षण करने के लिए और अधिक संभावनाएं हैं। आप यूनिट परीक्षण के हिस्से के रूप में या तो मैन्युअल परीक्षण या स्वचालित कोशिश कर सकते हैं। मैनुअल परीक्षण:

स्वचालित परीक्षण:

संबंधित मुद्दे