Атрибут метода C # не может содержать лямбда-выражение?

Резюме существующих ответов плюс два моих собственных цента:

1. Базовый ответ

Вы можете использовать функцию header() для отправки нового HTTP-заголовка, но его необходимо отправить в браузер перед любым HTML или текстом (например, перед объявлением ).

header('Location: '.$newURL);

2. Важные детали

die () или exit ()

header("Location: http://example.com/myOtherPage.php");
die();

Почему вы должны использовать die() или exit(): Ежедневный WTF

Абсолютный или относительный URL

С июня 2014 года можно использовать как абсолютные, так и относительные URL. См. RFC 7231 , который заменил старый RFC 2616 , где допускались только абсолютные URL.

Коды состояния

Заголовок PHP «Location» все еще использует код HTTP 302 , но вы не должны его использовать. Вам следует рассмотреть либо 301 (постоянное перенаправление), либо 303 (другое).

Примечание: W3C упоминает , что заголовок 303 несовместим со «многими пользовательскими агентами до HTTP / 1.1. В настоящее время все используемые браузеры являются пользовательскими агентами HTTP / 1.1. Это не так для многих других пользователей. агенты, такие как пауки и роботы.

3. Документация

HTTP-заголовки и функция header() в PHP

4. Альтернативы

Вы можете использовать альтернативный метод http_redirect($url);, для которого требуется установить пакет PECL pecl .

5. Вспомогательные функции

Эта функция не включает 303 код состояния:

function Redirect($url, $permanent = false)
{
    header('Location: ' . $url, true, $permanent ? 301 : 302);

    exit();
}

Redirect('http://example.com/', false);

Это более гибко:

function redirect($url, $statusCode = 303)
{
   header('Location: ' . $url, true, $statusCode);
   die();
}

6. Обходной путь

Как уже упоминалось header() перенаправляет только работу, прежде чем что-либо записывается. Они обычно терпит неудачу, если вызывается в середине HTML-вывода . Тогда вы можете использовать обходной путь заголовка HTML (не очень профессиональный! ) вроде:

 

Или даже редирект JavaScript.

window.location.replace("http://example.com/");

23
задан Didaxis 10 December 2010 в 16:39
поделиться

1 ответ

Да, это правильно. Значения атрибутов ограничены константами следующих типов

  • Простые типы (bool, byte, char, short, int, long, float и double)
  • string
  • System.Type
  • перечисляет
  • объект (Аргумент к параметру атрибута объекта типа должен быть постоянным значением одного из указанных выше типов.)
  • One- размерные массивы любого из вышеуказанных типов

Ссылка: http://msdn.microsoft.com/en-us/library/aa288454 (VS.71) .aspx

28
ответ дан 29 November 2019 в 02:41
поделиться
Другие вопросы по тегам:

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