Поддержка “Ожидает: 100 - продолжают” заголовок с ASP.NET MVC

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

sortBy = (keys, isReverse=false) => {
    this.setState(prevState => ({
        files: prevState.files.sort((a, b) => {
            const valueA = getValueAtPath(a, keys);
            const valueB = getValueAtPath(b, keys);

            if(isReverse) return valueB.localeCompare(valueA);

            return valueA.localeCompare(valueB);
        })
    }));
}

function getValueAtPath(file, path) {
    let value = file;
    let keys = [...path]; // preserve the original path array

    while(value && keys.length) {
      let key = keys.shift();
      value = value[key];
    }

    return (value || '').toString();
}
13
задан Greg Beech 18 May 2009 в 18:29
поделиться

3 ответа

100-continue должно обрабатываться IIS. Есть ли причина, по которой вы хотите сделать это явно?

2
ответ дан 1 December 2019 в 22:58
поделиться

IIS обрабатывает 100.

Тем не менее, нет, это не два ответа. В HTTP, когда Expect: 100-continue входит в заголовки сообщений, клиент должен дождаться получения ответа перед отправкой содержимого.

Из-за того, как asp.net спроектирован, у вас мало контроль над выходным потоком. Любые данные, которые записываются в поток, автоматически помещаются в ответ 200 с фрагментированным кодированием всякий раз, когда вы сбрасываете, будь то режим буферизации или нет.

К сожалению, все это спрятано во внутренних методах по всему миру. place, и в результате, если вы полагаетесь на asp.net, как и MVC, вы практически не сможете его обойти.

Подождите, пока вы попытаетесь получить доступ к входному потоку без буферизации. Целый груз боли.

Себ

2
ответ дан 1 December 2019 в 22:58
поделиться

.NET framework по умолчанию всегда отправляет заголовок expect: 100-continue для каждого сообщения HTTP 1.1. Это поведение можно программно контролировать для каждого запроса через свойство System.Net.ServicePoint.Expect100Continue , например:

HttpWebRequest httpReq = GetHttpWebRequestForPost();
httpReq.ServicePoint.Expect100Continue = false;

Его также можно контролировать программно глобально:

System.Net.ServicePointManager.Expect100Continue = false;

... или глобально через конфигурацию:

<system.net>
  <settings>
    <servicePointManager expect100Continue="false"/>
  </settings>
</system.net>

Спасибо Лэнсу Олсону и Филу Хааку за эту информацию.

16
ответ дан 1 December 2019 в 22:58
поделиться
Другие вопросы по тегам:

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