#c# #asp.net-core #localization #dotnet-httpclient #cultureinfo
Вопрос:
Я пытаюсь разместить все сообщения об ошибках и ответы в ASP.Сетевое приложение на английском языке. Это то, что я пробовал (в начале метода настройки):
CultureInfo.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
CultureInfo.CurrentUICulture = CultureInfo.CurrentCulture;
CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CurrentCulture;
CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentCulture;
var supportedCultures = new[] { "en-US" };
var localizationOptions = new RequestLocalizationOptions()
.SetDefaultCulture(supportedCultures[0])
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);
localizationOptions.DefaultRequestCulture = new RequestCulture(supportedCultures[0]);
app.UseRequestLocalization(localizationOptions);
Вот сообщение об исключении, которое я получаю обратно (я использую Flulrl, но использование HttpClient дает те же результаты):
resp = await _flurlClient
.Request("Accounts", "Login")
.PostJsonAsync(loginModel);
Call failed. Impossibile stabilire la connessione. Rifiuto persistente del computer di destinazione. (localhost:5001)...
Я пробовал размещать как на Kestrel, так и на IIS Express, ничего не изменилось.
Чего мне не хватает?
Комментарии:
1. неужели ты забыл добавить
services.AddLocalization();
?2. @GordonKhanhNg. Я пытался это сделать, но не помог. Я не пытаюсь предоставить свои собственные локализации. Я просто хотел бы получить ошибки по умолчанию, как если бы у меня была английская локализованная операционная система. Возможно ли это?
3. о-о-о… я присмотрелся и кое-что заметил… но это совершенно не соответствует комментарию здесь… так что взгляните на ответ
Ответ №1:
Вы пропускаете 2 части:
- Добавьте
services.AddLocalization();
, это зарегистрируетIStringLocalizerFactory
и общийIStringLocalizer
для вас app.UseRequestLocalization
воспользуйтесь темIOptions<RequestLocalizationOptions>
, чего вам сейчас тоже не хватает.
Таким образом, код должен быть:
// Registering things
services.AddLocalization();
var supportedCultures = new[]
{
new CultureInfo("en-US")
};
services.Configure<RequestLocalizationOptions>(opts =>
{
opts.DefaultRequestCulture = new RequestCulture("en-US");
opts.SupportedCultures = supportedCultures;
opts.SupportedUICultures = supportedCultures;
opts.AddInitialRequestCultureProvider(new CustomRequestCultureProvider(context =>
Task.FromResult(new ProviderCultureResult("en-US"))));
});
// Using things
app.UseRequestLocalization();
Примечание: Поскольку вы хотите вернуть только английскую локализацию в качестве примера, я только что настроил конфигурацию, чтобы установить «en-US», это был бы ваш единственный выбор. Если вам нужна истинная локализация, используйте свою собственную логику в var supportedCultures
и opts.AddInitialRequestCultureProvider
Комментарии:
1. SupportedCultures хочет, чтобы CultureInfos не был строками, кроме того, он должен работать. Я проверю это снова завтра и дам вам знать. Спасибо ;D
2. хорошая мысль… я просто копирую эту часть из вашего кода (XD)… просто исправил только эту часть. Имейте веру, мой друг
3. Я попробовал еще раз, но это не сработало. Я получаю эту ошибку:
System.Net.Http.HttpRequestException: Impossibile stabilire la connessione. Rifiuto persistente del computer di destinazione. (localhost:4545) ---> System.Net.Sockets.SocketException (10061): Impossibile stabilire la connessione. Rifiuto persistente del computer di destinazione.
4. Вот что я делаю с HttpClient:
await _client.GetAsync("https://localhost:4545/test");
URL-адрес является поддельным. Я не знаю, что происходит, я думал, что это работает, но сейчас это не так… Я пробовал как IIS Express, так и Kestrel5.
Impossibile stabilire la connessione
это исключение указывает на то, чтоhttpClient
невозможно вызвать сервер (запрос не может быть сделан на сервер). Это не связано с локализатором. Кстати… вот как строится мой проект … работает как заклинание