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?

Foi útil?

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();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top