locked
Sending JSON to Action Method MVC 4 RRS feed

  • שאלה

  • טוב, זאת השעה השלישית שלי בניסיונות לגרום לזה לעבוד,

    אבל אני כבר מניח שמשהו בהגדרות אצלי לא בסדר.

    בגדול זה ככה, אני מקבל JSON שהוא בעצם הCredentials שלי, accessToken ו-uid,

    אני שולח אותם בצורה הבאה לשרת >

    function SubmitLogin(credentials) {
            $.ajax({
                url: "/account/Fbauth",
                type: "POST",
                contentType: "json",
                data: {
                    credentials: JSON.stringify(credentials)   
                },
                error: function() {
                    alert("error logging in to your facebook account.");
                },
                success: function() {
                    window.location.reload();
                }
            });
        }


    כדי לוודא אני פותח פידלר ומקבל את העניין הבא : 

    POST http://localhost:XXXX/account/Fbauth HTTP/1.1
    Host: localhost:XXXX
    Connection: keep-alive
    Content-Length: 189
    Cache-Control: no-cache
    Origin: http://localhost:XXXX
    X-Requested-With: XMLHttpRequest
    Pragma: no-cache
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
    Content-Type: json
    Accept: */*
    Referer: http://localhost:XXXX/
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: he-IL,he;q=0.8,en-US;q=0.6,en;q=0.4
    Accept-Charset: windows-1255,utf-8;q=0.7,*;q=0.3
    Cookie: fbsr_XXXXXXXX5902575=NHDxNtYvbS7HNMhAjrd6okB6JCpNBRpJApmcMtkyD9A.eyJhXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    
    credentials=%7B%22uid%22%3A%22XXXXXXX428%22%2C%22accessToken%22%3A%22AAACXXXXXXXXX0djeTor7fSLhPfqNdULXNmObHDFPg5O9nryBqqDVDDKxQwe6SvowcjAYkXtzmdMZB7YTlf1OXXXXXXXXXXXXXXXXXXX

    עד כאן הכל כשורה, ואז אני מקבל NULL, ממש אבל ממש כאן :

     public ActionResult FbAuth(string credentials)
            {
                
                
                }
    ב - Credentials

    ניסיתי בהרבה וריאציות,עכשיו זה string אבל גם כשזה היה JSON סירב לעבוד, אני חושב שאני צריך להגדיר משהו כדי לקבל את הJSON, עזרתכם בבקשה!


    • נערך על-ידי נדב חורי יום ראשון 02 ספטמבר 2012 22:33
    יום ראשון 02 ספטמבר 2012 22:25

תשובות

  • טוב, חברי הטוב עודד פתר את העניין באופן הבא,

     public ActionResult FbAuth(string uid, string accessToken)
            {

    ועכשיו הכל עובד :-) 

    תודה על העזרה!

    • סומן כתשובה על-ידי נדב חורי יום שני 03 ספטמבר 2012 17:17
    יום שני 03 ספטמבר 2012 17:17

כל התגובות

  • תנסה ב-contentType לציין

    "application/json"

    במקום

    "json"

    יום שני 03 ספטמבר 2012 07:51
    מנחה דיון
  • קודם כל תודה זה מוביל אותי לאן שהוא, 

    עכשיו השרת מחזיר לי 500, עם המידע הבא

    <html>
        <head>
            <title>Invalid JSON primitive: credentials.</title>
           
    
                <span><H1>Server Error in '/' Application.
                <h2> <i>Invalid JSON primitive: credentials.</i> </h2></span>
    
             
                <b> Description: </b>An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
    
                <br><br>
    
                <b> Exception Details: </b>System.ArgumentException: Invalid JSON primitive: credentials.<br><br>
    
                <b>Source Error:</b> <br><br>
    
                <table width=100% bgcolor="#ffffcc">
                   <tr>
                      <td>
                          <code>
    
    An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.</code>
    
                      </td>
                   </tr>
                </table>
    
                <br>
    
                <b>Stack Trace:</b> <br><br>
    
                <table width=100% bgcolor="#ffffcc">
                   <tr>
                      <td>
                          <code><pre>
    
    [ArgumentException: Invalid JSON primitive: credentials.]
       System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject() +522135
       System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth) +265
       System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer) +78
       System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit) +44
       System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(String input) +9
       System.Web.Mvc.JsonValueProviderFactory.GetDeserializedObject(ControllerContext controllerContext) +191
       System.Web.Mvc.JsonValueProviderFactory.GetValueProvider(ControllerContext controllerContext) +19
    

    יום שני 03 ספטמבר 2012 08:49
  • שיניתי הגדרות להגדרות האלו

    $.ajax({
                url: "/account/Fbauth",
                type: "POST",
                contentType: "application/json",
                data: JSON.stringify(credentials) 

    וזה הJSON שנשלח בשונה מהדרך הקודמת כדי לעקוף את הארור שנזרק מהשרת על צורת הJSON,

    הדרך הקודמת היתה לשלוח 

    data: {
                    credentials: JSON.stringify(credentials)   
                },

    וזה מה שנשלח עכשיו לשרת, 

    {"uid":"1068","accessToken":"AAACBfWDbpW8BAN7LElzmcc7ies337}

    הדיבאג עוצר על הברייקפויינט אני משחרר אותו ואין לי Response מהשרת בכלל! כאילו, לא מחזיר 200, 500, 

    מה זה אומר מבחינתי, הגדרות מסויימות ?


    • נערך על-ידי נדב חורי יום שני 03 ספטמבר 2012 09:13
    יום שני 03 ספטמבר 2012 08:59
  • האם אתה יכול להעלות פרוייקט דוגמא עם הבעיה המתוארת? אפשר ל-SkyDrive או כל מערכת שיתוף אחרת
    יום שני 03 ספטמבר 2012 09:15
    מנחה דיון
  • אארגן משהו.
    יום שני 03 ספטמבר 2012 14:33
  • טוב, חברי הטוב עודד פתר את העניין באופן הבא,

     public ActionResult FbAuth(string uid, string accessToken)
            {

    ועכשיו הכל עובד :-) 

    תודה על העזרה!

    • סומן כתשובה על-ידי נדב חורי יום שני 03 ספטמבר 2012 17:17
    יום שני 03 ספטמבר 2012 17:17