Я разрабатываю трехслойное веб-приложение на веб-интерфейсе 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" }
);
}
}
Может кто-нибудь объяснить мне, что я делаю не так?