Domanda

Ho una pagina che si aspetta un valore stringa di query numerica. Ad esempio:

Details.aspx?rgn=1234

In questa pagina è un <asp:repeater> che è databound a un <asp:objectdatasource>. L'origine dati simile a questa:

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

Dal momento che si tratta di una pagina pubblica, a volte ho passato un valore non numerico da parte di hacker / motori di ricerca / ragazzi curiosi. Ho convalidare questa nel mio Page Load. Qualcosa di simile a questo:

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

Il problema è che il mio ripetitore fa ancora la sua associazione dati in ogni caso che provoca una [FormatException: Input string was not in a correct format.] ... che è qualcosa che voglio evitare. Tutte le idee di un modo semplice per aggirare il problema?

È stato utile?

Soluzione

Ho risposto alla mia domanda. Ho dimenticato di aggiungere un Response.End() sul redirect permanente:

Response.Status = "301 Moved Permanently";
Response.AddHeader("Location",URL);
Response.End();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top