我无法将表单数据从ASP.NET Web表单发布到我的Web API控制器,因为我一直收到404或“找不到”#39;错误。
以下是 Global.asax.vb 文件中的代码:
Imports System.Web.Optimization
Imports System.Web.Http
Public Class Global_asax
Inherits HttpApplication
Sub Application_Start(sender As Object, e As EventArgs)
' Fires when the application is started
RegisterRoutes(RouteTable.Routes)
BundleConfig.RegisterBundles(BundleTable.Bundles)
RouteTable.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", New With {.id = RouteParameter.Optional})
End Sub
End Class
这是Web窗体中的AJAX:
$.ajax({
type: 'POST',
url: 'api/UserApi',
data: $('form').serialize(),
success: function(response) {
var result = JSON.parse(response);
if (result.validationError) {
$('.jumbotron').prepend('<div class="alert alert-danger"><strong>Make sure to fill in all fields.</strong></div>');
if ($('.alert-danger').length > 1) {
$('.alert-danger').last().remove();
}
}
else if (result.error) {
$('.jumbotron').prepend('<div class="alert alert-danger"><strong>User with that email address already exists!</strong></div>');
if ($('.alert-danger').length > 1) {
$('.alert-danger').last().remove();
}
}
else {
if ($('.alert-danger').is(':visible')) {
$('.alert-danger').remove();
}
$('.jumbotron h1').remove();
$('form').replaceWith('<div class="alert alert-success"><strong>User created successfully!</strong></div>');
}
},
error: function(error) {
console.log(error);
}
});
最后,这是Web API控制器中的代码:
Imports System.Net
Imports System.Web.Http
Imports System.Web.Http.Results
<RoutePrefix("api/UserApi")>
Public Class UserApiController
Inherits ApiController
' POST api/<controller>
Public Sub PostValue(<FromBody()> ByVal email As String, name As String)
Dim user = New User With {
.Email = email,
.Name = name
}
Dim userDbContext = New UserDBContext()
userDbContext.Users.Add(user)
End Sub
End Class
控制器被称为&#34; UserApiController.vb &#34;它位于项目的主目录中。我已尝试在 App_Start 目录中的 RouteConfig.vb 文件中放置完全相同的路由,并使用您在类声明上方看到的路由注释我的控制器,但仍然没有运气。另外,我已将路由写为RouteTable.Routes.MapHttpRoute("DefaultApi", "api/{action}/{id}", New With {.controller = "UserApi", .id = RouteParameter.Optional})
并在AJAX中发布到url api / PostValue。
答案 0 :(得分:1)
确保您的控制器位于名为App_Code的ASP.NET文件夹中。
Right-click website (or sim)
> Add
> Add ASP.NET Folder
> App_Code
所有.cs代码都应该在那里。 (不是页面的代码隐藏文件。)