サンプルアプリケーションで小さなCRUDを実装しようとしています。
私はアプリケーションでBlazorを使っていますが、サーバーコールに関するいくつかの問題が見つかりました。
HTTP動詞を使用した従業員とメソッドの名前を持つ単純なAPIコントローラを作成しました。
[ApiController]
[Route("[controller]")]
public class EmployeeController : ControllerBase
{
EmployeeRepository objemployee = new EmployeeRepository();
[HttpGet]
[Route("api/Employee/Index")]
public IEnumerable<Employee> Index()
{
return objemployee.GetAllEmployees();
}
}
_
NS
empList = await Http.GetJsonAsync<Employee[]>("/api/Employee/Index");
_
lineは問題を報告し、私はBlazorを持つ初心者からそれを知らせません。コードで何をすべきですか?
ASPで構築されたアプリケーション。 Net Core 3.0 "、" Blazor Preview 9 "。
出力:ガイドをフォローして実装の例を調べようとしましたが、問題を解決できませんでした。
次の例外が発生しています。
WASM: Unhandled exception rendering component:
d.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 WASM:
System.Text.Json.JsonException:
'<' is an invalid start of a value. Path: $ | LineNumber: 0 | BytePositionInLine: 0. --->
System.Text.Json.JsonReaderException: '<' is an invalid start of a value. LineNumber: 0 | BytePositionInLine: 0.
d.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 WASM: at. System.Text.Json.ThrowHelper.ThrowJsonReaderException (System.Text.Json.Utf8JsonReader& json, System.Text.Json.ExceptionResource resource, System.Byte nextByte, System.ReadOnlySpan`1[T] bytes) <0x2398fc8 + 0x00020> in <81e9245ca982431695a55cc67ffb3b86>:0
d.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 WASM: at System.Text.Json.Utf8JsonReader.ConsumeValue (System.Byte marker) <0x1fa7718 + 0x0028e> in <81e9245ca982431695a55cc67ffb3b86>:0
d.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 WASM: at System.Text.Json.Utf8JsonReader.ReadFirstToken (System.Byte first) <0x1fa6d60 + 0x001ec> in <81e9245ca982431695a55cc67ffb3b86>:0
d.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 WASM: at System.Text.Json.Utf8JsonReader.ReadSingleSegment () <0x1fa6618 + 0x00234> in <81e9245ca982431695a55cc67ffb3b86>:0
d.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 WASM: at System.Text.Json.Utf8JsonReader.Read () <0x1fa61d0 + 0x00012> in <81e9245ca982431695a55cc67ffb3b86>:0
d.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 WASM: at System.Text.Json.JsonSerializer.ReadCore (System.Text.Json.JsonSerializerOptions options, System.Text.Json.Utf8JsonReader& reader, System.Text.Json.ReadStack& readStack) <0x1fa5b40 + 0x00062> in <81e9245ca982431695a55cc67ffb3b86>:0
d.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 WASM: --- End of inner exception stack trace ---
d.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 WASM: at System.Text.Json.ThrowHelper.ReThrowWithPath (System.Text.Json.ReadStack& readStack, System.Text.Json.JsonReaderException ex) <0x23e6bc8 + 0x00116> in <81e9245ca982431695a55cc67ffb3b86>:0
d.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 WASM: at System.Text.Json.JsonSerializer.ReadCore (System.Text.Json.JsonSerializerOptions options, System.Text.Json.Utf8JsonReader& reader, System.Text.Json.ReadStack& readStack) <0x1fa5b40 + 0x002a8> in <81e9245ca982431695a55cc67ffb3b86>:0
d.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 WASM: at System.Text.Json.JsonSerializer.ReadCore (System.Type returnType, System.Text.Json.JsonSerializerOptions options, System.Text.Json.Utf8JsonReader& reader) <0x1fa4e70 + 0x0003e> in <81e9245ca982431695a55cc67ffb3b86>:0
d.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 WASM: at System.Text.Json.JsonSerializer.ParseCore (System.String json, System.Type returnType, System.Text.Json.JsonSerializerOptions options) <0x1fa1698 + 0x00086> in <81e9245ca982431695a55cc67ffb3b86>:0
d.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 WASM: at System.Text.Json.JsonSerializer.Deserialize[TValue] (System.String json, System.Text.Json.JsonSerializerOptions options) <0x2398808 + 0x00022> in <81e9245ca982431695a55cc67ffb3b86>:0
d.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 WASM: at Microsoft.AspNetCore.Components.HttpClientJsonExtensions.GetJsonAsync[T] (System.Net.Http.HttpClient httpClient, System.String requestUri) <0x2270e18 + 0x000fa> in <900d091618e14952821fd2fc9b26598c>:0
d.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 WASM: at EMS.Client.Pages.FetchEmployee.OnInitializedAsync () [0x0002a] in C:\ES\Client\Pages\FetchEmployee.razor:51
d.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 WASM: at Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync () <0x1f4ed10 + 0x00176> in <cc81133ac6304aada69282c517e2b811>:0
d.printErr @ blazor.webassembly.js:1
blazor.webassembly.js:1 WASM: at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask (System.Threading.Tasks.Task taskToHandle) <0x224b4e8 + 0x000f4> in <cc81133ac6304aada69282c517e2b811>:0
`
_
これがBlazorの問題であるとは思わない、私はあなたがBlazor Webアセンブリホストテンプレートを使っていると思いますか?
ブラウザでそれにナビゲートしてAPIエンドポイントを再試行してロードした場合は、何を見ますか。私は404が見つからないか500エラーだと思いますか?
問題はあなたがあなたのAPIコントローラ上のルートをどのように定義したかであると思います。次の設定を試してください。
[ApiController]
[Route("[controller]")]
public class EmployeeController : ControllerBase
{
EmployeeRepository objemployee = new EmployeeRepository();
[HttpGet]
public IEnumerable<Employee> Index()
{
return objemployee.GetAllEmployees().ToArray();
}
_
}
その後、employees = await Http.GetJsonAsync<Employee[]>("Employee");
を呼び出します。すべてがうまくいっている場合は、従業員のリストを返す必要があります。
悪いAPIポイントを要求しているように見えます。あなたのエンドポイントをチェックしているだけで、HTMLではなくJSONを返していない:Open NavigatorとGo http://localhost:5000/api/Employee/Index
。
あなたのコードを見る、私はあなたに変更することをお勧めします:
Route("[controller]"...
_
に:
Route("/api/[controller]"...
_
問題は、JSONの代わりにHTMLを返すWeb APIに関連していると思います。 GetJsonAsyncメソッドはうまく機能し、JSONパーサも機能します。おそらく従業員のモデルが故障しています...
これを使用してみてください。
[ApiController]
public class EmployeeController: ControllerBase
{
EmployeeRepository objemployee = new EmployeeRepository();
[HttpGet("/")]
public IEnumerable<Employee> Index()
{
return objemployee.GetAllEmployees();
}
}
_
そしてそのようにWeb APIを呼び出します。
empList = await Http.GetJsonAsync<Employee[]>("api/Employee");
_
URLの先頭の "/"の削除に注意してください。これは問題の根源かもしれません。