Все запросы возвращают 404 not found

116
18 августа 2021, 03:40

Пытаюсь настроить asp.net mvc + angularjs приложение. Столкнулся с проблемой, то не могу настроить web api логику. Любые запросы на бэкенд возвращают 404 not found.

Пример метода клиентской части:

$scope.test = function () {
    $http.post('/api/Test', "some string")
        .then(function (response) {
            console.log("Success");
        }, function () {
            console.log("Failure");
        });
}

Бэкенд:

    [HttpPost]
    [Route("api/Test")]
    public void Test(string str) {
        var a = str;
    }

Также добавлял RoutePrefix на уровне контроллера, но это ситуацию не исправило. Буду признателен, если подскажете где я допустил ошибку.

namespace xmlReader.Controllers {
    public class HomeController : Controller {
        [HttpPost]
        [Route("api/Test")]
        public string Test(string str) {
            return str;
        }
    }


namespace webappang
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services
            // Web API routes
            config.MapHttpAttributeRoutes();
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
        }
    }
}

    namespace webappang {
    public class RouteConfig {
        public static void RegisterRoutes(RouteCollection routes) {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}
Answer 1

Проблема номер раз, вы хотите иметь API, но используете для этого обычный контроллер. Если вы хотите писать API, но наследуйтесь от ApiController

public class TestController : ApiController
{
    [HttpPost]
    [Route("api/Test")]
    public string Index([FromBody] string str)
    {
        var a = str;
        return a;
    }
}

Проблема два - вы хотите принимать чисто строку как параметр. Вы можете это сделать, но это немного сложнее, чем принимать Json. Во первых вам понадобится аттрибут [FromBody], по вторых вам придется начинать переданную строку со знака =, например =TestMessage.

Результат

READ ALSO
Задание C# с помощью структур

Задание C# с помощью структур

//Помогите реализовать код,чтобы пользователь мог добавлять,редактировать,удалять данные и может быть мою структуру можно правильнее записать?

164
Как изменить Material на обьекте с двумя Material(Unity)

Как изменить Material на обьекте с двумя Material(Unity)

Я создал небольшую модель в Blender 3D и у этой модели есть два материалаЭкспортировал ее в

190
Скрипт генерации мира не соединяет объекты

Скрипт генерации мира не соединяет объекты

Я написал скрипт генерации воксельного мира, в котором после генерации площяди, скрипт соединяет 1 чанк в 1 мешНо этого не происходит т

401