Pregunta

Tengo una página, que espera un valor numérico cadena de consulta. Por ejemplo:

Details.aspx?rgn=1234

En esta página es un <asp:repeater> que está enlazado a datos a un <asp:objectdatasource>. La fuente de datos es como la siguiente:

<asp:ObjectDataSource ID="ObjectRegion" runat="server" SelectMethod="GetRegions" TypeName="Region">
  <SelectParameters>
    <asp:QueryStringParameter Name="RegionID" QueryStringField="rgn" Type="Int32" DefaultValue='0' />
  </SelectParameters>
</asp:ObjectDataSource>

Como se trata de una página pública, a veces se pasan un valor no numérico por los hackers / motores de búsqueda / gente curiosa. Cómo valido esto en mi Load. Algo como esto:

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;
    }
}

El problema es que mi repetidor todavía hace su enlace de datos de todos modos lo que provoca un [FormatException: Input string was not in a correct format.] ... que es algo que quiero evitar. ¿Alguna idea de una forma sencilla de evitar esto?

¿Fue útil?

Solución

respondí a mi propia pregunta. Se me olvidó añadir un Response.End() en la redirección permanente:

Response.Status = "301 Moved Permanently";
Response.AddHeader("Location",URL);
Response.End();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top