Wie ein Fehler auf dem Rückweg von einem MVC wep api zu fangen?

stimmen
0

Ich habe einen MVC Web-App, die eine MVC wep api nennt. Der Web-API gibt eine Ausnahme, aber nicht sicher, wie es zu fangen.

Der Web-api fängt einen Fehler und wirft ihn.

Geben

Die MVC-Web-App-Methode, die die MVC-Web-API-Aufrufe.

Die „Try Catch“ hat den Fehler nicht fangen.

Die Zeile: if (result.IsSuccessStatusCode) zeigt der Statuscode nicht erfolgreich ist, so dass es in die falsche Bedingung fällt, die eine freundliche Botschaft in die viewbag legt einfach.

Stattdessen möchte ich die Error.chstml erscheinen.

Wie ich die Nachricht an dieser Stelle werfen die Error.chstml zu erscheinen zu bekommen? Die Seite wird unter anderen Fehlerszenarien erschienen. Ich glaube, die ‚HandleErrorAttribute‘, indem er in der Filter.config.cs Datei.

    [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;
            }
        }
    }

Dies ist, was ich in den FilterConfig.cs haben.

Die ErrorLoggerAttribute verweisen auf einen benutzerdefinierten Fehlerlogger.

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

Dies ist der 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>
Veröffentlicht am 19/03/2020 um 22:02
quelle vom benutzer
In anderen Sprachen...                            

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