2017-06-01 40 views
-1

我正在調用一個調用Web API的MVC Web應用程序。在我的Create(POST)方法中,用戶將在數據庫中輸入一些用戶的電子郵件地址。只有在電子郵件尚未存在於數據庫中的情況下,我纔有一張支票才能輸入電子郵件。如果它已經存在,我希望能夠向用戶顯示錯誤消息「電子郵件已存在」。如何處理WebClient響應以向用戶顯示錯誤消息?

我不知道如何當它無法創建一個approveduser處理顯示錯誤信息給用戶的反應如何?我正在嘗試使用try-catch的情況,但它不起作用。我有ViewBag.Message = error,我試圖在我的索引視圖中顯示它失敗。但沒有顯示。當我調試時,當數據庫中存在電子郵件時,它甚至不會進入catch,它只是將我帶到索引視圖。

public ActionResult Create([Bind(Include = "Email,FirstName,LastName")] ApprovedUsers approvedUsers) 
{ 
    try 
    { 
     using (WebClient client = new WebClient()) 
     { 
      token = Session.GetDataFromSession<string>("access_token"); 
      client.Headers.Add("authorization", "Bearer " + token); 
      byte[] response = client.UploadValues(apiUrl, "POST", new NameValueCollection() 
      { 
       { "Email", approvedUsers.Email }, 
       { "FirstName",approvedUsers.FirstName }, 
       { "LastName",approvedUsers.LastName } 
      }); 

      string result = System.Text.Encoding.UTF8.GetString(response); 
      return RedirectToAction("Index"); 
     } 
    } 
    catch 
    { 
     return RedirectToAction("Index", new { error = "Email exists" }); 
    } 
} 

指數行動

public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page, string error) 
     { 
      ViewBag.Message = error; 

這是被稱爲API方法。

public IHttpActionResult PostApprovedUsers(ApprovedUsers approvedUsers) 
{ 
    if (!ModelState.IsValid) 
    { 
     return BadRequest(ModelState); 
    } 

if (!db.ApprovedUsers.Any(u => u.Email == approvedUsers.Email)) 
{ 
    db.ApprovedUsers.Add(approvedUsers); 
    db.SaveChanges(); 
} 
return CreatedAtRoute("DefaultApi", new { id = approvedUsers.Email }, approvedUsers); 
+0

只是想知道什麼呢指數的行動是什麼樣子? –

+0

我在我的文章中添加了Index ViewResult中的一部分代碼。那是你問的嗎? – StraightUp

+0

在進入指數時加入斷點。查找您嘗試傳入的內容。您正試圖將對象傳遞給不需要的方法。相反,它需要這些:字符串sortOrder,字符串currentFilter,字符串searchString,int?頁面,字符串錯誤。如果你有一個錯誤字符串參數,例如你可以通過這個參數。但是通常有很多參數,最好是創建一個模型並將其傳入。 –

回答

0

這是我的API,它是造成問題。即使無法創建重複的電子郵件,它也永遠不會去catch,因爲如果電子郵件確實存在於數據庫中,我沒有錯誤的請求返回。

改變了我的API來這個,然後它的工作。

if (db.ApprovedUsers.Any(u => u.Email == approvedUsers.Email)) 
{ 
    return Content(HttpStatusCode.BadRequest, "Email exists already"); 
} 
else 
{ 
    db.ApprovedUsers.Add(approvedUsers); 
} 
    try 
    { 
     db.SaveChanges(); 
    } 
    catch (DbUpdateException e) 
    { 
     if (ApprovedUsersExists(approvedUsers.Id)) 
     { 
      return Conflict(); 
     } 
     throw e; 
0

試試這個:

public ActionResult Create([Bind(Include = "Email,FirstName,LastName")] ApprovedUsers approvedUsers) 
{ 
    try 
    { 
     using (WebClient client = new WebClient()) 
     { 
      token = Session.GetDataFromSession<string>("access_token"); 
      client.Headers.Add("authorization", "Bearer " + token); 
      byte[] response = client.UploadValues(apiUrl, "POST", new NameValueCollection() 
      { 
       { "Email", approvedUsers.Email }, 
       { "FirstName",approvedUsers.FirstName }, 
       { "LastName",approvedUsers.LastName } 
      }); 

      string result = System.Text.Encoding.UTF8.GetString(response);    
     } 
    } 
    catch 
    { 
     TempData["Error"] = "Email Exists";}); 
    } 

    RedirectToAction("Index"); 

} 

public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page, string error) 
    { 
     ViewBag.Message = TempData["Error"].ToString(); 
    } 
+0

不,它不顯示錯誤信息。 – StraightUp

+0

好吧,我從來沒有使用ViewBag,而是強烈類型的模型,其中包含錯誤信息。如果你想使用視圖包,我糾正了例子 –