Tôi tương đối mới với khung MVC nhưng tôi có một dự án Web hoạt động với bộ điều khiển API sử dụng AttributeRouting (gói NuGet) - tuy nhiên, tôi bắt đầu một dự án khác và nó không muốn theo dõi các tuyến đường mà tôi đưa ra.Định tuyến thuộc tính MVC không hoạt động
Bộ điều khiển:
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:
// Lưu ý: Để được hướng dẫn về cách kích hoạt IIS6 hoặc chế độ IIS7 cổ điển, // truy cập 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);
}
}
Khi tôi cố điều hướng đến/api/q/users - tôi gặp lỗi 404 không tìm thấy. Nếu tôi thay đổi các tuyến đường thành "/ api/blazr/users" - tôi gặp lỗi về nhiều hành động và không thể xác định hành động cần thực hiện.
Any help is appreciated - Tôi thực sự chỉ cần một lực đẩy nhỏ để tìm ra nơi vấn đề là, không cần phải giải quyết nó hoàn toàn đối với tôi
Cảm ơn
EDIT (Tôi cần phải học!)
routes.axd:
api/{controller}/{id}
{resource}.axd/{*pathInfo}
{controller}/{action}/{id}
Khi bạn sử dụng 'debugger đường' từ 'AttributeRouting' (nên có sẵn tại' ~/routes.axd') làm bạn thấy các tuyến đường dự kiến từ các thuộc tính, tức là '/ api/q/users'? –
Không, chỉ cần api/{controller}/{id}, {tài nguyên} .axd/{* pathInfo} và {controller}/{action}/{id}. Khi tôi phá vỡ các ứng dụng trên MapAttributeRoutes() - bộ sưu tập tuyến đường trở lại với 0 tuyến đường ... – Teagan42
Tôi có các tuyến đường để hiển thị trong routes.axd bằng cách thực hiện IController trong bộ điều khiển của tôi - nhưng nó vẫn không hoàn toàn đúng (trả về sản phẩm nào trang) – Teagan42