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
回答2件
あなたの回答
tips
プレビュー