Jestem względnie nowy w strukturze MVC, ale mam działający Web Project z kontrolerem API, który wykorzystuje AttributeRouting (pakiet NuGet) - jednak zaczynam inny projekt i po prostu nie chcę podążać wytyczonymi przeze mnie trasami.MVC Attribute Routing nie działa
Kontroler:
public class BlazrController : ApiController
{
private readonly BlazrDBContext dbContext = null;
private readonly IAuthProvider authProvider = null;
public const String HEADER_APIKEY = "apikey";
public const String HEADER_USERNAME = "username";
private Boolean CheckSession()
{
IEnumerable<String> tmp = null;
List<String> apiKey = null;
List<String> userName = null;
if (!Request.Headers.TryGetValues(HEADER_APIKEY, out tmp)) return false;
apiKey = tmp.ToList();
if (!Request.Headers.TryGetValues(HEADER_USERNAME, out tmp)) return false;
userName = tmp.ToList();
for (int i = 0; i < Math.Min(apiKey.Count(), userName.Count()); i++)
if (!authProvider.IsValidKey(userName[i], apiKey[i])) return false;
return true;
}
public BlazrController(BlazrDBContext db, IAuthProvider auth)
{
dbContext = db;
authProvider = auth;
}
[GET("/api/q/users")]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
[GET("api/q/usersauth")]
public string GetAuth()
{
if (!CheckSession()) return "You are not authorized";
return "You are authorized";
}
}
AttributeRoutingConfig.cs
public static class AttributeRoutingConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
// See http://github.com/mccalltd/AttributeRouting/wiki for more options.
// To debug routes locally using the built in ASP.NET development server, go to /routes.axd
routes.MapAttributeRoutes();
}
public static void Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
Global.asax.cs:
// UWAGA: Instrukcje dotyczące włączania trybu IIS6 lub IIS7 klasycznej, // odwiedź http://go.microsoft.com/?LinkId=9394801
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
Podczas próby nawigowania do/api/q/users - pojawia się błąd 404 nie znaleziony. Jeśli zmienię trasy na "/ api/blazr/users" - pojawia się błąd dotyczący wielu akcji i nie jestem w stanie określić, którą akcję podjąć.
Każda pomoc jest mile widziana - Naprawdę wystarczy niewielki sugerować, aby dowiedzieć się, gdzie problem jest, nie trzeba go rozwiązać całkowicie dla mnie
Dzięki
EDIT (muszę się nauczyć!)
routes.axd:
api/{controller}/{id}
{resource}.axd/{*pathInfo}
{controller}/{action}/{id}
Podczas korzystania z debugera trasy „” z 'AttributeRouting' (powinien być dostępny w' ~/routes.axd') widzisz oczekiwane trasy z atrybutów, czyli '/ api/q/users'? –
Nie, tylko api/{kontroler}/{id}, {zasób} .axd/{* pathInfo} i {kontroler}/{akcja}/{id}. Kiedy przerywam aplikację na MapAttributeRoutes() - kolekcja tras wraca z 0 trasami ... – Teagan42
Mam trasy, które pojawią się w routes.axd przez implementację IControllera w moim kontrolerze - ale nadal nie jest to w porządku (zwraca puste strona) – Teagan42