Question

J'ai une page qui attend une valeur de chaîne de requête numérique. Par exemple:

Details.aspx?rgn=1234

Sur cette page est un qui est DataBound <asp:repeater> à un <asp:objectdatasource>. La source de données ressemble à ceci:

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

Puisque c'est une page publique, parfois je suis passé d'une valeur non numérique par les pirates / moteurs de recherche / gens curieux. Je valide dans mon Page_Load. Quelque chose comme ceci:

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

Le problème est que mon répéteur fait encore son databinding de toute façon qui provoque une [FormatException: Input string was not in a correct format.] ... ce qui est quelque chose que je veux éviter. Toutes les idées d'un moyen simple de contourner ce problème?

Était-ce utile?

La solution

Je lui ai répondu à ma propre question. J'ai oublié d'ajouter un Response.End() sur la redirection permanente:

Response.Status = "301 Moved Permanently";
Response.AddHeader("Location",URL);
Response.End();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top