Un saluto a tutti,
ho una web application in web forms e ho deciso di aggiungere un area al progetto per acquisire maggiore confidenza con il pattern MVC e portare in seguito qualche miglioria. Il progetto web forms funziona correttamente anche nella sua parte dove implementa le web api ed il routing è così definito:
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SupportedMediaTypes.Add(
new System.Net.Http.Headers.MediaTypeHeaderValue("text/html"));
}
con relativa chiamata: WebApiConfig.Register(GlobalConfiguration.Configuration); in Global.asax.cs
Ho aggiunto un area "Guide", ho definito un controller "Welcome" ed in guideAreaRegistration.cs ho definito:
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"guide_default",
"Guide/{controller}/{action}/{id}",
new { controller = "Welcome", action = "Index", id = UrlParameter.Optional }
);
}
anche questa con relativa chiamata in testa ad Application_Start in Global.asax.cs: AreaRegistration.RegisterAllAreas();
Ora, le mie perplessità sono queste:
1) è normale che http://localhost:64661/Guide/Welcome/ non chiami di default la action Index?
2) è normale che http://localhost:64661/Guide/Welcome/Index/ debba avere slash finale per invocare la action altrimenti è errorre 404?
3) perchè http://localhost:64661/Guide/Welcome/Details/77 invoca la action Details con id sempre a null nonostante 77?
4) perchè return RedirectToAction("Index/"); necessita del carattere slash per funzionare?
Di seguito il codice in questione:
public class WelcomeController : Controller
{
// GET: Guide/Welcome
public ActionResult Index()
{
return View();
}
// GET: guide/Welcome/Details/5
public ActionResult Details(int? id)
{
if (id == null)
return RedirectToAction("Index/");
return View();
}
}