发布到Web API控制器时Web窗体404错误

时间:2018-05-07 15:26:25

标签: asp.net ajax vb.net asp.net-web-api webforms

我无法将表单数据从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。

1 个答案:

答案 0 :(得分:1)

确保您的控制器位于名为App_Code的ASP.NET文件夹中。

Right-click website (or sim)
> Add
> Add ASP.NET Folder
> App_Code

所有.cs代码都应该在那里。 (不是页面的代码隐藏文件。)