Ошибка 404 из веб-форм при публикации в веб-контроллере API - PullRequest
0 голосов
/ 07 мая 2018

Я не могу опубликовать данные формы из веб-формы ASP.NET на моем контроллере Web API, поскольку я получаю сообщение об ошибке 404 или «Не найдено».

Вот код в моем 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

Это 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

Контроллер называется " UserApiController.vb " и находится в главном каталоге проекта. Я попытался поместить ту же самую маршрутизацию в файл RouteConfig.vb в каталоге App_Start , а также использовать аннотацию для маршрутизации, которую вы видите над объявлением моего класса в моем контроллере, и все еще не повезло. Кроме того, я написал маршрут как RouteTable.Routes.MapHttpRoute("DefaultApi", "api/{action}/{id}", New With {.controller = "UserApi", .id = RouteParameter.Optional}) и отправляю в URL api / PostValue в AJAX.

1 Ответ

0 голосов
/ 09 мая 2018

Убедитесь, что ваш контроллер находится в папке ASP.NET с именем App_Code.

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

Весь код .cs должен быть там.(Не файлы кодов страниц).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...