¿Cómo capturar una vuelta procedente de error de un API WEP MVC?

votos
0

Tengo una aplicación web MVC que llama a un API WEP MVC. La Web API devuelve una excepción, pero no está seguro de cómo cogerlo.

La Web API atrapa un error y lo tira.

introducir

El método de aplicación web MVC que llama a la API Web MVC.

El intento de captura no detectar el error.

La línea: si espectáculos (result.IsSuccessStatusCode) el código de estado no tiene éxito por lo que cae en la falsa condición que sólo pone un mensaje amistoso en el viewbag.

En cambio, quiero que aparezca el Error.chstml.

Cómo lanzo el mensaje en este momento para conseguir que aparezca el Error.chstml? La página ha aparecido bajo otros escenarios de error. Creo que al tener el 'HandleErrorAttribute' en el archivo 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;
            }
        }
    }

Esto es lo que tengo en las FilterConfig.cs.

El ErrorLoggerAttribute apunta a un registrador de error personalizado.

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());
        }
    }
}

Esta es la 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>
Publicado el 19/03/2020 a las 22:02
fuente por usuario
En otros idiomas...                            

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