gpt4 book ai didi

c# - 在 Global.asax 中验证 HTTP 请求和返回特定 HTTP 响应的正确方法是什么?

转载 作者:太空狗 更新时间:2023-10-29 20:18:03 25 4
gpt4 key购买 nike

我正在尝试验证服务收到的 HTTP 请求。我想检查是否存在所有必需的 header 等。如果没有,我想抛出一个异常,在某个地方设置正确的响应代码和响应的状态行。我不想将用户重定向到任何特定的错误页面,只是发送答案。

我想知道我应该把代码放在哪里?我的第一个猜测是在 Application_BeginRequest 中验证请求,在出错时抛出异常并在 Application_Error 中处理它。

例如:

 public void Application_BeginRequest(object sender, EventArgs e)
{
if(!getValidator.Validate(HttpContext.Current.Request))
{
throw new HttpException(486, "Something dark is coming");
}
}

public void Application_Error(object sender, EventArgs e)
{
HttpException ex = Server.GetLastError() as HttpException;
if (ex != null)
{
Context.Response.StatusCode = ex.ErrorCode;
Context.Response.Status = ex.Message;
}
}

显然,在这种情况下,Visual Studio 会提示 Application_BeginRequest 中存在未处理的异常。它有效,因为给定的代码被返回给客户端,但我觉得这种方法有问题。

[编辑]: 我删除了关于自定义状态行的第二个问题,因为这些问题并没有真正联系起来。

感谢您的帮助。

最佳答案

当抛出异常时,Visual Studio 默认中断执行。您可以通过转到“调试”->“异常”并取消选中公共(public)语言运行时异常旁边的复选框来更改此行为。但是,这里的主要问题是您抛出异常只是为了捕获它并在响应中设置状态代码。您可以在不抛出异常的情况下做到这一点。例如

void Application_BeginRequest(object sender, EventArgs e)
{
if(!getValidator.Validate(HttpContext.Current.Request))
{
HttpContext.Current.Response.StatusCode = 403
var httpApplication = sender as HttpApplication;
httpApplication.CompleteRequest();
}
}

关于c# - 在 Global.asax 中验证 HTTP 请求和返回特定 HTTP 响应的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7159633/

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