Comment attraper une erreur de revenir d'un MVC wep api?

voix
0

J'ai une application Web MVC qui appelle un MVC wep api. Le api Web renvoie une exception, mais ne savez pas comment l'attraper.

Le api web attire une erreur et la jette.

entrez

La méthode d'application Web MVC qui appelle la api web MVC.

Le « Try Catch » n'a pas pris l'erreur.

La ligne: if (result.IsSuccessStatusCode) affiche le code d'état ne réussit pas il tombe dans la fausse condition qui met juste un message amical dans le ViewBag.

Au lieu de cela, je veux que le Error.chstml apparaisse.

Comment je lance le message à ce point pour faire comparaître le Error.chstml? La page est apparue dans d'autres scénarios d'erreur. Je crois en avoir la « HandleErrorAttribute » dans le fichier Filter.config.cs.

    [HttpGet]
    public async Task<ActionResult> GetUserProfile()
    {
        if ((string)@Session[HasProfileSwitch] == False)
        {
            UserProfileForMaintViewModel userProfileForMaintViewModel = new UserProfileForMaintViewModel();
            return View(UserProfileMaint1, userProfileForMaintViewModel);
        }
        else
            try
            {
                string hostName = Dns.GetHostName();
                string myIpAddress = Dns.GetHostEntry(hostName).AddressList[2].ToString();
                UserProfileForMaintViewModel userProfileForMaintViewModel = new UserProfileForMaintViewModel();

                using (var client = new HttpClient())
                {
                    client.BaseAddress = new Uri(http://localhost:56224);
                    string restOfUrl = /api/profileandblog/getuserprofile/ + Session[UserName] + / + myIpAddress + / + Session[UserId];
                    client.DefaultRequestHeaders.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(application/json));

                    // Call the web api - HTTP GET.
                    HttpResponseMessage result = await client.GetAsync(restOfUrl);

                    if (result.IsSuccessStatusCode)
                    {
                        var userResponse = result.Content.ReadAsStringAsync().Result;
                        userProfileForMaintViewModel = JsonConvert.DeserializeObject<UserProfileForMaintViewModel>(userResponse);
                    }
                    else
                    {
                        // The web api sent an error response.
                        ViewBag.errormessage = Server error on getting the active userProflie. UserId:  + Session[UserId] +  Please contact the administrator.;                          
                    }

                    return View(UserProfileMaint1, userProfileForMaintViewModel);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }

Voilà ce que j'ai dans les FilterConfig.cs.

Le ErrorLoggerAttribute pointe vers un enregistreur d'erreur personnalisé.

using System.Web.Mvc;
using GbngWebClient.Helpers;

namespace GbngWebClient
{
    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
            filters.Add(new ErrorLoggerAttribute());
        }
    }
}

C'est le Error.cshtml.

@{
ViewBag.Title = Error;
Layout = null;
}

<meta http-equiv=Cache-Control content=no-cache>
<meta http-equiv=Pragma content=no-cache>
<meta http-equiv=Expires content=-1 />

 <style>
   .center {
    text-align: center;
    margin-left: auto;
    margin-right: auto;
    margin-bottom: auto;
    margin-top: auto;
  }
</style>

<link href=~/Content/bootstrap.min.css rel=stylesheet />

<div class=container>
    <div class=row>
        <div class=span12>
            <div class=hero-unit center>
                <h1>
                    Something Went Wrong!
                </h1>

                @if (TempData[ErrorMessage] != null)
                {
                    <div class=alert alert-danger>
                        <strong>Oops!</strong> @TempData[ErrorMessage]
                    </div>
                }
                else
                {
                    <div class=alert alert-danger>
                        An error occurred while processing your request.
                    </div>
                }

            <br />
            <p>Contact the Administrator.</p>
            <p><b>To go back home, just press this button:</b></p>
            <a href=/Home/Index class=btn btn-large btn-info><i class=icon-home icon-white>
            </i>Take Me Home</a>
            </div>
           <br />
           <p></p>
       </div>
    </div>
</div>
Créé 19/03/2020 à 22:02
source utilisateur
Dans d'autres langues...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more