Как санировать строку запроса при использовании с ретранслятором с привязкой к данным? - PullRequest
4 голосов
/ 09 августа 2011

Учитывая следующий URL:

domain.com/page.aspx?id=123

Как можно очистить это значение строки запроса, когда оно используется в элементе управления с привязкой к данным, таком как повторители SqlDataSource?

<asp:SqlDataSource ID="projectDataSource" runat="server" 
    ConnectionString="MyConnectionStrings" 
    SelectCommand="select foo from bar">
    <SelectParameters>
        <asp:QueryStringParameter 
            DefaultValue="0" 
            Name="idfromqs" 
            QueryStringField="id" 
            Type="Int32" />
    </SelectParameters>
</asp:SqlDataSource>

Так, что ?id=asdf не приводит к ошибке?

На эти похожие вопросы есть хорошие ответы, но ни один из них, похоже, не совсем соответствует моей проблеме

Примечание. Это внутреннее приложение, которое ограничено небольшим блоком локального IP-адреса. Меня меньше беспокоит злонамеренное внедрение SQL-кода, и я больше беспокоюсь о том, чтобы менее опытные пользователи не могли видеть неприятные сообщения об ошибках.

Ответы [ 2 ]

2 голосов
/ 09 августа 2011

Вы можете использовать Selecting событие SQLDataSource, где вы можете проверить значение запроса. Это событие возникает до вызова метода выбора.

protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
    SqlDataSource1.SelectParameters.Clear(); //Clear existing parameters
    // based on your check, you can pass the default value
    SqlDataSource1.SelectParameters["idfromqs"].DefaultValue = "Set Value here";

}
1 голос
/ 09 августа 2011

Просто снимите шрифт. Строка запроса - это уже строка, если вы явно не конвертируете ее во что-то другое (например, int32). Если есть какая-то причина для преобразования его в int32, вы можете сделать это позже в коде, где проще применять логику.

<asp:QueryStringParameter 
   DefaultValue="0" 
   Name="idfromqs" 
   QueryStringField="id" />
...