404 страницы response.redirect по сравнению с server.transfer

Я соглашаюсь с другими - устанавливает значение по умолчанию GetDate () на столбце LastUpdate и затем используют триггер для обработки любых обновлений.

Просто что-то простое как это:

CREATE TRIGGER KeepUpdated on Profiles
FOR UPDATE, INSERT AS 
UPDATE dbo.Profiles 
SET LastUpdate = GetDate()
WHERE Username IN (SELECT Username FROM inserted)

, Если Вы хотите стать действительно необычными, имейте его, оценивают то, что изменяется по сравнению с тем, что находится в базе данных, и только измените LastUpdate, если было различие.

Рассматривают это...

  • 7:00 - Пользователь 'jsmith' создается с фамилией 'Smithe' (ой), значений по умолчанию LastUpdate к 7:00

  • 8:00 - 'jsmith' электронные письма IT для высказывания его зовут неправильный. Вы сразу выполняете обновление, таким образом, фамилией является теперь 'Smith' и (благодаря триггеру), LastUpdate показывает 8:00

  • 14:00 - Ваш более слабый коллега наконец скучает с StumbleUpon и проверяет свою электронную почту. Он видит более раннее сообщение от 'jsmith' относительно смены имени. Он работает: Профили ОБНОВЛЕНИЯ УСТАНАВЛИВАЮТ LastName =' Smith' ГДЕ Имя пользователя ='jsmith' , и затем возвращается к перемещающейся MySpace. Триггер не заботится, что фамилией уже был 'Smith', однако, таким образом, LastUpdate теперь показывает 14:00.

при просто слепом изменении LastUpdate каждый раз, когда оператор обновления работает, это ТЕХНИЧЕСКИ корректно, потому что обновление действительно происходило, но, вероятно, имеет больше смысла на самом деле сравнивать изменения и действие соответственно. Тем путем оператор Update 14:00 коллегой все еще работал бы, но LastUpdate все еще покажет 8:00.

- Kevin

5
задан Aaron Harun 25 June 2010 в 19:06
поделиться

4 ответа

customErrors statusCode = "404" приводит к временному перенаправлению 302, а затем к 404 (если вы установили это в коде своей страницы 404).

Следовательно, следующее должно сделать это для вы в своем global.asax или ошибку HttpModule:

    protected void Application_Error(Object sender, EventArgs e)
    {
        Exception exception = Server.GetLastError();
        if (exception is HttpUnhandledException)
        {
            if (exception.InnerException == null)
            {
                Server.Transfer(ERROR_PAGE_LOCATION, false);
                return;
            }
            exception = exception.InnerException;
        }

        if (exception is HttpException)
        {
            if (((HttpException)exception).GetHttpCode() == 404)
            {
                Server.ClearError();
                Server.Transfer(NOT_FOUND_PAGE_LOCATION);
                return;
            }
        }

        if (Context != null && Context.IsCustomErrorEnabled)
            Server.Transfer(ERROR_PAGE_LOCATION, false);
        else
            Log.Error("Unhandled exception trapped in Global.asax", exception);
    }

Edit: О, и Лучший способ реализовать 404 в ASP.NET поставил меня на путь к императивному Server.ClearError ();

См. http://www.andornot.com/blog/post/Handling-404-errors-with-ASPNET.aspx , где я написал сообщение, которое охватывает все это.

3
ответ дан 14 December 2019 в 13:43
поделиться

Я бы использовал раздел клиентских ошибок в web.config, тогда вы можете указать страницу, на которую должен перейти 404.

<configuration>
    <system.web>
        <customErrors mode="On" defaultRedirect="Error.aspx">
            <error statusCode="404" redirect="404Error.aspx" />
        </customErrors>
    </system.web>
</configuration>

На принимающей странице, если вы все же хотите отправить 404 вы можете поместить это в событие page_load:

Response.Status = "404 Not Found";
2
ответ дан 14 December 2019 в 13:43
поделиться

Я советую позволить процессу ASP.NET выполнять работу за вас на основе вашего web.config, но если вы действительно хотите сделать это в коде, вам следует придерживаться Server.Transfer, потому что это сохранит постбэк.

0
ответ дан 14 December 2019 в 13:43
поделиться

Response.Redirect будет делать 302 сначала, чем 404 на перенаправленной странице. Server.Transfer сохранит URL-адрес, поэтому на запрошенной странице он 404.

Я думаю, что все зависит от SEO. Я предлагаю использовать Server.Transfer, поскольку браузеру / поисковой системе более ясно, что запрошенный URL не найден. Если вы используете Response.Redirect, запрошенная страница «временно» перенаправляется на ненайденную страницу. Это нехорошо ... 302 - плохая идея.

1
ответ дан 14 December 2019 в 13:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: