Почему я получаю сообщение об ошибке 400, когда хочу опубликовать файл JSON HTTP REQUEST

Зарегистрируйте фабрику как Task<HttpClient>, используя DelegateInjectionFactory. Затем вы можете await после ввода, в управляемом вами коде.

public static IUnityContainer CompositionRoot()
{
    var container = new Unity.UnityContainer();
    container.RegisterType<Application>();
    container.RegisterType<Task<HttpClient>>
    (
        new DelegateInjectionFactory
        (
            new Func<Task<HttpClient>>
            (
                async () => await Create()
            )
        )
    );
    return container;
}

public static async Task<HttpClient> Create()
{
    await Task.Delay(1);  //Simulate doing something asynchronous
    return new HttpClient();
}

Пример класса, который получит инъекцию:

public class Example
{
    protected readonly Task<HttpClient> _client; //Injected

    public Example(Task<HttpClient> client)
    {
        _client = client;
    }
    public async Task<string> Run()
    {
        var result = await (await _client).GetAsync("http://www.StackOverflow.com");
        var text = await result.Content.ReadAsStringAsync();
        return text;
    }
}

Теперь Create() будет выполняться асинхронно, но его не ждет контейнер (который не настроен для этого). Вместо этого его ждет ваш собственный код в классе, который его потребляет, который вы контролируете.

Примечание. Хотя этот пример демонстрирует, что он возможен , я бы вероятно, не делать этого в производственном коде. Чаще всего писать заводский класс, давать ему метод асинхронного ввода, вводить заводский класс и ждать метода в классе, получающем инъекцию.

0
задан Leon Greiner 18 January 2019 в 18:35
поделиться

1 ответ

Вы отправляете строковый литерал "finish" вместо переменной с именем finish, в которой текст запроса имеет строковое значение (var finish = JSON.stringify(obj)). попробуйте изменить на xhttp.send(finish)

Также следует упомянуть тип контента xhttp.setRequestHeader('Content-type', 'application/json') до вызова send.

0
ответ дан Amardeep Bhowmick 18 January 2019 в 18:35
поделиться
Другие вопросы по тегам:

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