Как я могу настроить маршрутизацию в моем asp .new веб-приложении - PullRequest
1 голос
/ 30 января 2020

Я разрабатываю трехслойное веб-приложение на веб-интерфейсе asp. net. Теперь у меня проблема: в своем слое пользовательского интерфейса в HomeController я пишу следующее:

HomeController.cs


    public class HomeController : Controller
    {
        IPointService _pointService;
        IUserDataService _userDataService;

        public HomeController(IPointService pointService, IUserDataService userDataService)
        {
            _pointService = pointService;
            _userDataService = userDataService;
        }
public ActionResult Index()
        {
            ViewBag.Title = "Home Page";

            return View();
        }
        [System.Web.Http.HttpPost]
        public string Plot(UserDataViewModel plotRequest)
        {
            try
            {
                var userDataDTO = new UserDataDTO { A = plotRequest.A, B = plotRequest.B, C = plotRequest.C, PointFrom = plotRequest.PointFrom, PointTo = plotRequest.PointTo };
                _userDataService.AddUserData(userDataDTO);
                List<PointDTO> pointDTOs = new List<PointDTO>();
                pointDTOs = _userDataService.Plot(userDataDTO);
                return JsonConvert.SerializeObject(pointDTOs);
            }
            catch (ValidationException ex)
            {
                return ex.ToString();
            }
        }
    }


Но когда я отлаживаю свое приложение, я вижу, что функция Plot не вызывается , Но если я напишу то же самое забавное c в другом контроллере, оно будет вызвано:

PlotController.cs

    public class PointController : ApiController
    {
        public List<PointViewModel> _points = new List<PointViewModel>();
        IPointService _pointService = new PointService();
        IUserDataService _userDataService = new UserDataService();

        public PointController() { }

        public PointController(IPointService pointService, IUserDataService userDataService)
        {
            _pointService = pointService;
            _userDataService = userDataService;
        }

        [HttpPost]
        public string Plot(UserDataViewModel plotRequest)
        {
            try
            {
                var userDataDTO = new UserDataDTO { A = plotRequest.A, B = plotRequest.B, C = plotRequest.C, PointFrom = plotRequest.PointFrom, PointTo = plotRequest.PointTo, Step = plotRequest.Step };
                _userDataService.AddUserData(userDataDTO);
                List<PointDTO> pointDTOs = new List<PointDTO>();
                pointDTOs = _userDataService.Plot(userDataDTO);
                return JsonConvert.SerializeObject(pointDTOs);
            }
            catch (ValidationException ex)
            {
                return ex.ToString();
            }
        }
    }


Мой POST в Index.cs html:

$.ajax({
            url: '../api/Home/Plot',
            method: 'POST',
            data: JSON.stringify(plotRequest),
            contentType: 'application/json; charset=utf-8',
            dataType: 'json',
            success: function (data) {
                console.log(JSON.parse(data));
                plotFunction(JSON.parse(data));
            }
        });

Если я напишу url: '../api/Point/Plot', он будет вызван.

Мой RouteConfig.cs:

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 }
            );
            routes.MapRoute(
                name: "Plot",
                url: "api/{controller}/{action}",
                defaults: new { controller = "Home", action = "Index" }
                );
        }
    }

И мой WebApiConfig.cs:

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Конфигурация и службы веб-API

            // Маршруты веб-API
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}",
                defaults: new { controller = "Home", action = "Plot" }
            );
        }
    }

Может кто-нибудь объяснить мне, что я делаю не так?

1 Ответ

0 голосов
/ 30 января 2020

Вы не определяете свои маршруты правильно. Прежде всего, когда вы определяете маршруты, вы должны начинать с спецификаций c и генериков c: вот ваши корни после изменения:

   routes.MapRoute(
                name: "Plot",
                url: "api/Home/Plot",
                defaults: new { controller = "Home", action = "Index" }
                );

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
...