Impedir um controle de ligação de dados para um ObjectDataSource?
-
21-08-2019 - |
Pergunta
Eu tenho uma página que espera um valor string de consulta numérico. Por exemplo:
Details.aspx?rgn=1234
Nesta página é um <asp:repeater>
que é ligação de dados a um <asp:objectdatasource>
. A fonte de dados é algo como isto:
<asp:ObjectDataSource ID="ObjectRegion" runat="server" SelectMethod="GetRegions" TypeName="Region">
<SelectParameters>
<asp:QueryStringParameter Name="RegionID" QueryStringField="rgn" Type="Int32" DefaultValue='0' />
</SelectParameters>
</asp:ObjectDataSource>
Uma vez que esta é uma página pública, às vezes eu ter passado um valor não numérico por hackers / motores de busca / curiosos pessoal. I validar esta na minha Page_Load. Algo parecido com isto:
protected void Page_Load(object sender, EventArgs e)
{
int RegionID;
string strRegion = Request.QueryString["rgn"];
if(string.IsNullOrEmpty(strRegion) || !int.TryParse(strRegion, out RegionID))
{
// setup permanent redirect
return;
}
}
O problema é que a minha repetidor ainda faz a sua de qualquer maneira ligação de dados que provoca uma [FormatException: Input string was not in a correct format.]
... que é algo que eu quero evitar. Todas as idéias de uma maneira simples de contornar este problema?
Solução
Eu respondi minha própria pergunta. Eu esqueci de adicionar um Response.End()
no redirecionamento permanente:
Response.Status = "301 Moved Permanently";
Response.AddHeader("Location",URL);
Response.End();