web-dev-qa-db-ja.com

Startup.cs-「value」のパスは「/」で始まる必要があります

Visual Studio2017で新しい.NETCore MVCアプリケーションを作成し、マルチテナント認証を有効にしました。
構成(ClientId、Authorityなど)を完了しましたが、アプリケーションをデバッグすると、Startup.csに例外があります。具体的にはapp.useOpenIdConnectAuthentication 方法。

与えられた例外は

System.ArgumentException:「value」のパスは「/」で始まる必要があります。

私はC#と.NET Coreに関しては少し初心者なので、明らかな何かが欠けているかどうかはわかりません。主な問題は、デバッガーがパラメーター 'value'で参照していることです。これは、コードでそれについて言及されていないためです。 appsettings.jsonに構成アイテムを追加する以外に、VisualStudioによって生成されたデフォルトのテンプレート以外の変更はありません。

8
Ben Short

質問にはコードがありませんので、なるべく一般的な回答をさせていただきます。
この例外は、このオーバーロードPathString.FromUriComponent(string)を使用し、文字列が/文字で始まらない場合に表示されます

したがって、たとえば、次のコードは例外をスローします。

PathString.FromUriComponent("controllerName/actionName"); // throw exception

前の例外を修正するには、次のように記述できます

PathString.FromUriComponent("/controllerName/actionName"); // working, but as relative path

そしてもちろん、これは相対的なパスになります。

絶対パスを使用したい場合(文字列を/で開始しない場合)、Uriの代わりにstringオブジェクトをパラメーターとして受け取るこのメソッドの別のオーバーロードを使用する必要があります。

ここに例があります

// use an absolute path
PathString.FromUriComponent(new Uri("https://localhost:8000/controller/action/"))
4
Hakan Fıstık

同じ例外が発生しますが、別のメソッドUseExceptionHandler

エラーは次のとおりです。

ArgumentException:「value」のパスは「/」で始まる必要があります。 Nombredelparámetro:値Microsoft.AspNetCore.Http.PathString..ctor(文字列値)Microsoft.AspNetCore.Builder.ExceptionHandlerExtensions.UseExceptionHandler(IApplicationBuilderアプリ、文字列errorHandlingPath)

交換して修正

app.UseExceptionHandler("Home/Error");

app.UseExceptionHandler("/Home/Error");

文字列の先頭に/文字が追加されていることに注意してください。

1
Vidyesh