在MVC4中使用新的Api控制器,我发现一个问题。 如果我有以下方法: public IEnumberable<string> GetAll() public IEnumberable<string> GetSpecific(int i) 这将工作。 但是,如果我想要检索一些不同types的不同数据,即使将$.getJSON设置为GetAllIntegers方法,它也将默认为GetAllIntegers方法: public IEnumberable<int> GetAllIntergers() (错误的命名约定) 我能做到这一点吗? Web API控制器中只能有一个GetAll方法吗? 我认为想要实现我想要的更容易。 下面是一段代码,用于显示我想要在一个ApiController : public IEnumerable<string> GetClients() { // Get data } public IEnumerable<string> GetClient(int id) { // Get data } public IEnumerable<string> GetStaffMember(int id) { // Get data } public IEnumerable<string> GetStaffMembers() { // Get data }
从Web API 2的模板来看,post方法总是这样的: [ResponseType(typeof(MyDTO))] public IHttpActionResult PostmyObject(MyDTO myObject) { … return CreatedAtRoute("DefaultApi", new { id = myObject.Id }, myObject); } 我不明白这个CreatedAtRoute()方法。 我从msdn或Google找不到任何有用的信息。 任何人都可以解释给我的CreatedAtRoute()方法?
我正在创build一个多租户网站,为客户提供页面托pipe服务。 URL的第一部分将是一个string,标识客户端,使用以下URL路由scheme在Global.asax中定义: "{client}/{controller}/{action}/{id}" 这工作正常,与/ foo / Home / Index的URL。 但是,当使用[Authorize]属性时,我想redirect到一个也使用相同映射scheme的login页面。 因此,如果客户端是foo,那么login页面将是/ foo / Account / Login,而不是web.config中定义的固定/帐户/loginredirect。 MVC使用HttpUnauthorizedResult返回401未授权状态,我认为这会导致ASP.NETredirect到web.config中定义的页面。 那么有谁知道如何重写ASP.NETloginredirect行为? 或者,通过创build一个自定义授权属性在MVC中redirect会更好吗? 编辑 – 答:一些挖掘到.Net源,我决定一个自定义的身份validation属性是最好的解决scheme: public class ClientAuthorizeAttribute: AuthorizeAttribute { public override void OnAuthorization( AuthorizationContext filterContext ) { base.OnAuthorization( filterContext ); if (filterContext.Cancel && filterContext.Result is HttpUnauthorizedResult ) { filterContext.Result = new RedirectToRouteResult( new RouteValueDictionary { { "client", […]
情景 我有一个应用程序,我们采取了旧的查询stringURL结构: ?x=1&y=2&z=3&a=4&b=5&c=6 并将其改为path结构: /x/1/y/2/z/3/a/4/b/5/c/6 我们正在使用ASP.NET MVC和(自然)ASP.NET路由。 问题 问题是我们的参数是dynamic的,并且(理论上)我们需要适应的参数数量是没有限制的。 直到我们被下列火车撞到,这一切都很好: HTTP错误400.0 – 错误的请求ASP.NET检测到URL中的无效字符。 当我们的URL超过一定的长度时,IIS会抛出这个错误。 Nitty砂砾 以下是我们发现的: 这不是一个IIS问题 IIS确实有一个最大path长度限制,但上面的错误不是这个。 了解点iis点networking如何使用请求过滤部分“基于请求限制的filter” 如果IIS的path太长,则会抛出404.14,而不是400.0。 此外,IIS最大path(和查询)的长度是可configuration的: <requestLimits maxAllowedContentLength="30000000" maxUrl="260" maxQueryString="25" /> 这是一个ASP.NET问题 经过一番探讨: IIS论坛主题:ASP.NET 2.0的最大URL长度? http://forums.iis.net/t/1105360.aspx 事实certificate,这是一个ASP.NET(好,.NET真的)问题。 问题的核心在于,据我所知,ASP.NET无法处理超过260个字符的path。 在棺材里的钉子,这是由菲尔哈克本人证实: 堆栈溢出ASP.NET URL MAX_PATH限制问题ID 265251 问题 那么问题是什么? 问题是,这个限制有多大? 对于我的应用程序,这是一个交易杀手。 对于大多数应用程序,这可能是一个没有问题的。 怎么披露? 没有提到ASP.NET路由的地方,我听说过这个限制的窥视。 ASP.NET MVC使用ASP.NET路由的事实使得这个影响更大。 你怎么看?