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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

ASP.NET

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

2661閲覧

VB.NET apiControllerへの接続(ルーティング?)がうまくいかない

sad

総合スコア16

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

ASP.NET

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

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/11/05 05:57

編集2020/11/05 08:13

VB.NETで、javaScriptからjQuery.getJSONを利用してコントローラーにアクセス、クエリパラメーターを渡して処理をしたいのですが、404になってアクセスできません。
引数にYMD(年月日)を渡すと、年齢を計算して返すAPIです。
Age.js

javascript

1function AgeGet() { 2 var year = $('#year').val(); 3 if ($('#month').val().length == 1) { 4 var month = "0" + $('#month').val(); 5 } else { 6 var month = $('#month').val(); 7 } 8 if ($('#day').val().length == 1) { 9 var day = "0" + $('#day').val(); 10 } else { 11 var day = $('#day').val(); 12 } 13 var YMD = year + month + day; 14 15 console.log(YMD); 16 17 if (YMD.length == 8 && month >= 1 && month <= 12 18 && day >= 1 && day <= 31) { 19 $.getJSON('/api/Age', 20 { 21 YMD : YMD 22 } 23 ) 24 25 .done(function (data) { 26 if (data != null) { 27 var json = JSON.parse(data); 28 var age = json.age; 29 $("#age").val(age); 30 console.log(string); 31 console.log(json); 32 console.log(json.age); 33 } 34 }) 35 .fail(function () { 36 console.log("失敗"); 37 }) 38 } 39} 40

C#で作ったものは問題なく動作します。
AgeController.cs

C#

1using Microsoft.AspNetCore.Mvc; 2using Newtonsoft.Json; 3using Test.Models; 4 5namespace Test 6{ 7 [Route("api/[controller]")] 8 [ApiController] 9 public class AgeController : ControllerBase 10 { 11 [HttpGet] 12 public string Get(string YMD) 13 { 14 Keisan keisan = new Keisan(); 15 string jAge = keisan.ageKeisan(YMD); 16 17 string jsonAge = JsonConvert.SerializeObject(jAge); 18 19 return jsonAge; 20 } 21 } 22} 23

しかし、同じような構成でVBにすると動きません。
AgeController.vb

VB

1Imports System.Net 2Imports System.Web.Http 3Imports Newtonsoft.Json 4 5Namespace Controllers 6 7 <Route("/api/[Controller]")> 8 Public Class AgeController 9 Inherits System.Web.Mvc.Controller '←これと 10         'ApiController ←これを試したが動かない 11 12 Function GetAge(YMD As String) 13 14 Dim keisan As New Keisan() 15 Dim jAge = keisan.ageKeisan(YMD) 16 17 Dim jsonAge = JsonConvert.SerializeObject(jAge) 18 19 Return jsonAge 20 21 End Function 22 End Class 23End Namespace

<Route("")>の定義がおかしいのでしょうか?
それともVBではRouteを使えないのでしょうか?

ご助力お願い致します。


環境:
windows10 64bit
visual studio 2019
ASP.NET webアプリケーション MVC
.NET Framework 4.7.2
VB.NET

追記:

プロジェクトは上記環境のものです。
コントローラー→追加→コントローラー..→Web API 2 コントローラー_空
を作成して編集したものがAgeController.vbです。


C#のプロジェクトは.NET Core MVC
VBのプロジェクトは.NET Framework MVC
を利用しています

色々調べていると、WebApiConfigに設定されたルートを通って、Controllerが呼び出されている?という考えに至りました。
しかしrouteTemplateに合わせてURLを叩いてみても404でした。
WebApiConfig.vb

VB

1Imports System.Web.Http 2 3Public Class WebApiConfig 4 Public Shared Sub Register(ByVal config As HttpConfiguration) 5 ' Web API configuration and services 6 7 ' Web API routes 8 config.MapHttpAttributeRoutes() 9 10 config.Routes.MapHttpRoute( 11 name:="DefaultApi", 12 routeTemplate:="api/{controller}/{id}", 13 defaults:=New With {.id = RouteParameter.Optional} 14 ) 15 End Sub 16End Class

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/11/05 06:02

プロジェクトを作成する際使用したテンプレートは何かを質問欄を編集して追記願います。 Core ではない .NET Framework 版の ASP.NET Web API アプリと理解していますが、違ったらそれも質問欄を編集して追記してください。
sad

2020/11/05 06:15 編集

いつもありがとうございます。 プロジェクトは前回までの質問と同じVB.NETのものです。
guest

回答2

0

404になってアクセスできません。
C#で作ったものは問題なく動作します。
しかし、同じような構成でVBにすると動きません。

多分、C# の Route("api/[controller]") と VB の Route("/api/[Controller]") の違い(api の前の / の有無)だと思います。

api の前に / があるのとないのとでは違うのは分かりませんか?

分からなければ Fiddler などで要求 url の違いを見てみると分かると思います。

【2020/11/05 18:30 追記】

上のレスは取り消します。

なぜうまくいかないかは、Core と .NET をゴッチャにして、回答者の想像のはるか斜め上のことをやっているからです。はっきり言うとメチャクチャで話にならないです。

Core と .NET Framework では特に Web API 関係はかなり異なります。

.NET Framework ベースのアプリにするなら、ゼロから Visual Studio の Web API のテンプレートを使ってプロジェクトを作り、それに実装してください。

イメージ説明

話はそれからにしましょう。でないと発散するばかりで時間の無駄になりそうです。

【2020/11/06 15:10 追記】

質問者さんの回答欄の 2020/11/06 15:01 の私のコメントで「あとで回答欄にその画像を貼っておきます」と書いた件です。

Visual Studio 2019 のテンプレートで、新たに VB.NET の MVC のソリューション/プロジェクトを作って(Web API は無し)、生成されたコントローラーのフォルダに Web API 用のコントローラーを追加すると、NuGet インストールなどの設定が終わると以下の注意書きが表示されます。

イメージ説明

Visual Studio を閉じるとその注意書きは消えてしまいますので、表示されたら即その通りにやるようにしないと忘れてしまうかもしれませんね。

投稿2020/11/05 06:10

編集2020/11/06 06:12
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sad

2020/11/05 06:21

ありがとうございます。気づいていませんでした、、。 Route("api/[controller]")に修正したのですが、404のままです。 コントローラーの名前を変えたほうが良いのでしょうか?
退会済みユーザー

退会済みユーザー

2020/11/05 06:59

C# と VB.NET ではソリューション/プロジェクトが違いますよね。同居できるわけがないはずですので。 で、よく見てみれば質問者さんのアップされた C# の方は Core ベースのもののように見えます。 VB.NET の方は訳が分からないコードになってます。.NET ベースではそうはならないはずです。 そのあたり確認してください。
sad

2020/11/05 07:16

はい。C#はASP.NET Core webアプリケーション MVCで、VB.NETはASP.NET webアプリケーション MVC で作成しています。 申し訳ございません、.NET Coreと.NETの違いはプラットフォームの壁がないだけだと思っていました。 VB.NETは.NETベースにしなければならないですね、、調べてきます。
退会済みユーザー

退会済みユーザー

2020/11/05 07:19

だから質問のコメント欄で、「Core ではない .NET Framework 版の ASP.NET Web API アプリと理解していますが、違ったらそれも質問欄を編集して追記してください」と書いたのですが・・・ 真摯に対応してもらわないと話が通じなくなります。
sad

2020/11/05 07:29

文章を理解しきれていませんでした。申し訳ございません。急ぎ追記させていただきます。
sad

2020/11/05 13:55

ありがとうございます。 同じソリューションに新しく.NET Frameworkのweb APIを作成しました。 とりあえず調べながら作成を進めてみます。 お手すきの際にご教授、ご指示お願い致します。
退会済みユーザー

退会済みユーザー

2020/11/05 23:52

> 同じソリューションに新しく.NET Frameworkのweb APIを作成しました。 なぜ新たに別のソリューション/プロジェクトとして作らないのですか? 他のプロジェクトの影響は 100% ないと断言できますか?
sad

2020/11/05 23:59

申し訳ございません。 別プロジェクトなので影響は無いと判断しておりました。 影響が無いとは言い切れないのですね、、別のソリューションにさせていただきます。
sad

2020/11/06 00:59

色々思考を整理でき、解決することができました。 ありがとうございました。
sad

2020/11/06 08:34

何度もありがとうございます。次回からはしっかりと確認を怠らないようにします。 目先の課題を終わらせることを急ぐあまり、知識が中途半端に足りない事や必要な過程を意識せずに飛ばしてしまったりと反省の多い質問でした。 無知の無知レベルです。 こんな状態の人間にお付き合いいただき、どれだけ心労をお掛けしたか、、申し訳ございません。 これからもあらゆる言語で何度も躓く予定です。どうかこれからもよろしくお願いいたします。
guest

0

自己解決

解決しました。
Global.asaxに
GlobalConfiguration.Configure(AddressOf WebApiConfig.Register)
を追加で記述することで同ソリューションでもAPIのルーティングが機能しました。

投稿2020/11/06 00:58

sad

総合スコア16

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

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

退会済みユーザー

退会済みユーザー

2020/11/06 05:48 編集

最初に既存の ASP.NET MVC プロジェクト(Web API 無しの)に、 > コントローラー→追加→コントローラー..→Web API 2 コントローラー_空 を作成して編集したものがAgeController.vbです。 としたと思いますが、その操作をして NuGet インストールなどの設定了後にそうするよう注意書きが Visual Studio に表示されるはずです。 表示されなかったのですか? それとも読まなかった?
sad

2020/11/06 03:14

知識の無さ、意識の低さ、注意力、集中力の欠如が今回の問題を招いていると理解しております。 恐らく表示されていたのでは、と思うのですが記憶にございません。
退会済みユーザー

退会済みユーザー

2020/11/06 06:01

> 恐らく表示されていたのでは、と思うのですが記憶にございません。 VB.NET ではやったことがないので試してみましたが、注意書きは表示されました。Visual Studio を閉じると消えてしまうので気が付かなかったのかもしれませんね。あとで回答欄にその画像を貼っておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問