How to know if the request is ajax in in Application_Error()

How to know if the request is ajax in in Application_Error()

I want to handle app error in Application_Error().If the request is ajax and some exception is thrown,then write the error in log file and return a json data that contains error tips for client . Else if the request is synchronism and some exception is thrown ,write the error in log file and then redirect to a error page.

but now i cant judge which kind the request is . I want to get "X-Requested-With" from header ,unfortunately keys of headers don't contain "X-Requested-With" key ,why?


Testing for the request header should work. For example:

public class HomeController : Controller
    public ActionResult Index()
        return View();

    public ActionResult AjaxTest()
        throw new Exception();

and in Application_Error:

protected void Application_Error()
    bool isAjaxCall = string.Equals("XMLHttpRequest", Context.Request.Headers["x-requested-with"], StringComparison.OrdinalIgnoreCase);
    if (isAjaxCall)
        Context.Response.ContentType = "application/json";
        Context.Response.StatusCode = 200;
            new JavaScriptSerializer().Serialize(
                new { error = "some nasty error occured" }


and then send some Ajax request:

<script type="text/javascript">
    $.get('@Url.Action("AjaxTest", "Home")', function (result) {
        if (result.error) {

You can also wrap the Context.Request (of the type HttpRequest) in a HttpRequestWrapper which contains a method IsAjaxRequest.

bool isAjaxCall = new HttpRequestWrapper(Context.Request).IsAjaxRequest();

it is possible to add custom headers in the client side ajax call. Refer

Try looking for this header value in the server.

You could use this.

    private static bool IsAjaxRequest()
        return HttpContext.Current.Request.Headers["X-Requested-With"] == "XMLHttpRequest";

Need Your Help

Is there a difference between (local), '.' and localhost?

sql-server connection-string

I've used all three of these when making local programmatic connections to databases. Is there any real difference between them?

What uses are there for "placement new"?

c++ memory-management new-operator placement-new

Has anyone here ever used C++'s "placement new"? If so, what for? It looks to me like it would only be useful on memory-mapped hardware.