gpt4 book ai didi

javascript - 如何处理 asp.net Httphandler 中的错误?

转载 作者:行者123 更新时间:2023-12-03 09:50:58 26 4
gpt4 key购买 nike

我在 asp.net 中有返回文件的 Httphandler。在代码中我有 Response.AddHeader("Content-Disposition", "attachment; filename=somefile.ext");所以页面 URL 保持不变。但如果 Httphandler URL 出现错误,就会变成这样 http://localhost:55161/document.axd我有白屏。

如何在不刷新页面的情况下从 Httphandler 返回 javascript 警报?像这样的事情:

public class Document: IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
HttpRequest Request = context.Request;
HttpResponse Response = context.Response;

//Response.AddHeader("Content-Disposition", "attachment; filename=somefile.ext");
Response.ContentType = "application/javascript";
Response.Write("<script type ='text/javascript'>alert('Error!');</script>");

}

public bool IsReusable
{
get { return false; }
}
}

PS,对不起我的英语,我不是母语:)

最佳答案

我认为你这样做是错误的。您不应该从 http 处理程序返回 javascript。它们旨在用于处理数据。应根据 Httphandler 执行的结果显示警报。

您可以做的是将 try catch block 放入您的 http 处理程序中,并在出现异常时返回特定代码作为结果。然后在您的 javascript 中 - 检查该代码 - 并显示警报。

在下面你可以找到我在这个案例中使用过的东西。它会给你一个想法 - 你有一个单独的类,其中包含执行结果 - 并返回易于通过 javascript 处理的 JSON。

        public void ProcessRequest(HttpContext context)
{
var result = new HandlerResult();
var resultJson = string.Empty;
var reqDictionary = Helper.DecryptQueryParams(context);

try
{
if (!Helper.AllQueryParametersExists(reqDictionary, "userid", "topN", "time", "latitude", "logitude", "shareLocation"))
{
_log.Error("Incomplete query string parameters!");

throw new Exception("Incomplete query string parameters!");
}

Guid userId;
Guid.TryParse(reqDictionary["userid"], out userId);
int topN;
int.TryParse(reqDictionary["topn"], out topN);

double minutes;
double.TryParse(reqDictionary["time"], out minutes);

var time = DateTime.Now.AddDays(-minutes);

double latitude;
double.TryParse(reqDictionary["latitude"], out latitude);
double logitude;
double.TryParse(reqDictionary["logitude"], out logitude);
bool shareLocation = Helper.ParseInt(reqDictionary["sharelocation"]);

var finalTime = new DateTime(time.Year, time.Month, time.Day, time.Hour, time.Minute, 0);

var users = _userAccessor.Repo.FindUsers(userId, topN, finalTime, latitude,
logitude, shareLocation);

var sb = new StringBuilder();

var list = new List<UserLocation>();
foreach (var user in users)
{
var userLocation = new UserLocation
{
UserId = user.Id,
UserName = user.Email,
FullName = user.FullName,
Gender = user.Gender,
Age = user.Age,
Latitude = user.Latitude,
Longitude = user.Longitude,
Time = user.Time
};

list.Add(userLocation);
}

context.Response.Write(sb.ToString());


result.Result = string.Empty;
result.ResultStatus = HandlerResult.Status.Successful;
resultJson = JsonConvert.SerializeObject(list);
_log.Info("OK");
}
catch (Exception ex)
{
result.ResultStatus = HandlerResult.Status.Error;
result.Result = ex.Message;
resultJson = JsonConvert.SerializeObject(result);
_log.Error(ex);
}
finally
{
context.Response.Clear();
context.Response.ContentType = "text/plain";
context.Response.Write(resultJson);
context.Response.Flush();
context.Response.End();

_log.Info(resultJson);
}
}


public class HandlerResult
{
public string Result { get; set; }

public Guid UserId { get; set; }

public Status ResultStatus { get; set; }

public HandlerResult(Status resultStatus, string result)
{
this.ResultStatus = resultStatus;
this.Result = result;
}

public HandlerResult(string result)
{
ResultStatus = Status.Novalue;
this.Result = result;
}

public HandlerResult()
{

}

public enum Status
{
Novalue = 0,
Successful = 1,
Error = 2,
Notvaliduser = 3,
Successfulupdate = 4,
UserExists = 5,
UserNotConfirmed = 6
}
}

关于javascript - 如何处理 asp.net Httphandler 中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30884190/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com