На основании ответа Роналдса Я обновил свой собственный метод анализа строки запроса. Я использую его, чтобы добавить его в качестве метода расширения объекта Page, чтобы мне было легко проверять значения и типы строки запроса и перенаправлять, если запрос страницы недопустим.
Метод расширения выглядит следующим образом:
public static class PageHelpers
{
public static void RequireOrPermanentRedirect<T>(this System.Web.UI.Page page, string QueryStringKey, string RedirectUrl)
{
string QueryStringValue = page.Request.QueryString[QueryStringKey];
if(String.IsNullOrEmpty(QueryStringValue))
{
page.Response.RedirectPermanent(RedirectUrl);
}
try
{
T value = (T)Convert.ChangeType(QueryStringValue, typeof(T));
}
catch
{
page.Response.RedirectPermanent(RedirectUrl);
}
}
}
Это позволяет мне делать такие вещи как:
protected void Page_Load(object sender, EventArgs e)
{
Page.RequireOrPermanentRedirect<int>("CategoryId", "/");
}
Затем я могу написать остальную часть своего кода и положиться на существование и правильный формат элемента строки запроса, поэтому мне не нужно проверять его каждый раз, когда я хочу получить к нему доступ.
Примечание. Если вы используете pre .net 4, вам также понадобится следующий метод расширения RedirectPermanent:
public static class HttpResponseHelpers
{
public static void RedirectPermanent(this System.Web.HttpResponse response, string uri)
{
response.StatusCode = 301;
response.StatusDescription = "Moved Permanently";
response.AddHeader("Location", uri);
response.End();
}
}