質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.39%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

186閲覧

ReactからC#(asp.net 6)にfetchしたい

mmm1007

総合スコア6

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2024/09/14 10:41

実現したいこと

asp.netのreactテンプレートを使用して、react側からfetchしてPOST形式でデータを受け渡したい

発生している問題・分からないこと

404エラーになってしまう。(console.logには エラーが発生しました のメッセージがでる)

エラーメッセージ

error

1POST https://localhost:44458/search 404 (Not Found)

該当のソースコード

js

1const sendSearchRequest = async () => { 2 if (keyword.trim() === '') return; // 空の入力は無視 3 try { 4 //const response = await fetch('/api/search', { 5 const response = await fetch('search', { 6 method: 'POST', 7 headers: { 8 'Accept': 'application/json', //追加 9 'Content-Type': 'application/json', 10 }, 11 body: JSON.stringify({ keyword: keyword }) 12 }); 13 14 if (response.ok) { 15 const result = await response.json(); 16 console.log('結果:', result); 17 } else { 18 console.error('エラーが発生しました'); 19 } 20 } catch (error) { 21 console.error('通信エラー:', error); 22 } 23 console.log(keyword) 24 };

C#

1 [Route("[controller]")] 2 [ApiController] 3 public class SearchController : ControllerBase 4 { 5 [HttpPost] 6 public IActionResult Post([FromBody] SearchRequest request) 7 { 8 string keyword = request.Keyword; 9 10 // キーワードを使って検索処理などを行う 11 var result = $"検索キーワードは: {keyword} です"; 12 13 return Ok(new { message = result }); 14 } 15 } 16 public class SearchRequest 17 { 18 public string Keyword { get; set; } 19 }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

ネットで同様の例が見つかりませんでした。
テンプレートのデフォルトでweatherforecastをgetでとってきているのでCORS(クロスオリジン)問題ではなさそう。

補足

reactテンプレート
react18.2
.net6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hqf00342

2024/09/14 14:31

reactとASP.NET Coreはそれぞれ何番ポートで動作していますか? エラーメッセージにある「44458」ポートはreact側のポートではないでしょうか?
mmm1007

2024/09/14 15:37

コメントありがとうございます。 ASP.NET Core サーバーではhttps://localhost:7050 でhttps://localhost:44458 にリダイレクトされているようでした(おそらくこちら側がreactのサーバー) ただ、デフォルトで用意されていたFetchData.jsとWeatherForecastController.csはGETをつかって天気情報をfetchできているようでしたが、やはりこのポートの違いが問題なのでしょうか?
hqf00342

2024/09/15 02:18 編集

なるほど、ということは ASP.NET APIではなくreactに対しfetchしています。 なのでfetch()の引数でターゲットホストを ASP.NEThttps://localhost:7050) となるように指定する必要があります。 サンプルのweatherforecastがホスト指定していないのが不思議に思えるかもしれません。 それはVisualStudioのテンプレートで、react側のプロジェクト内に細工がしてあるからです。 vite.config.jsに「react側の/weatherforecast」にアクセスが来たらASP.NETにリダイレクトするような設定があると思います。作成された "search" に対しても同じことをしてもよいかもしれません。
mmm1007

2024/09/15 03:48

コメントありがとうございます。以下を試したところ問題が解決しました。 setupProxy.jsに追記したところうまく動きました。 const context = [ "/weatherforecast", "/作成したコントローラー名", ]; 解決していただきありがとうございました。
hqf00342

2024/09/15 05:57

NET8で確認したので若干違ったかもしれません・・。 解決したようでよかったです。
guest

回答1

0

自己解決

setupProxy.jsに追記したところうまく動きました。
const context = [
"/weatherforecast",
"/作成したコントローラー名",
];

投稿2024/09/21 15:56

mmm1007

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.39%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問