Tag: routing

网站要求MVC控制器上的“需要身份validation”,而不是其他人

我有一个asp.net C#MVC网站。 它使用SimpleAuthentication和表单身份validation。 一切正常,要求人们登录进入页面。 但是,我有一个名为“ReportsController”的控制器。 每当您转到此控制器中的操作的URL时,它总是会在浏览器窗口中弹出“需要validation”。 它只是为这个控制器而不是任何其他控制器。 该url为“www.domain.com/reports”。 当我从IIS和我的开发服务器运行时,此URL工作正常,但不在我的实时服务器上运行。 这是运行IIS7。 我已经检查了我的web.config,它肯定是设置为Forms身份validation而不是Windows。 任何人都有任何想法为什么任何以“/ Reports”开头的url都不起作用。 我猜它是服务器特有的东西,比如IIS设置或web.config更改,但我无法弄清楚它会是什么。 namespace ProjectName.Controllers { public class ReportsController : Controller { public ActionResult Index() { throw new SystemException(“here”); return View(); } } } Web.config文件:

以编程方式添加路线

我编写了一个简单的实用程序,为特定接口添加路由。 代码很简单: using System; using System.Diagnostics; using System.Net.NetworkInformation; using System.Text; class Program { static void Main(string[] args) { const string firstConnection = “xxxx.yyyyy”; const string routeAddMask = “route add XX.XX.XX.XX mask 255.255.255.255 XXX.XXX.XXX.XXX METRIC 99 IF {0}”; StartProcess(“rasdial”, firstConnection); var interfaceId = GetInterfaceId(firstConnection); string routeAdd = string.Format(routeAddMask, interfaceId); StartProcess(“route”, routeAdd); } private static int GetInterfaceId(string […]

如何定义路由中的PUT方法仅限于没有参数的控制器中的Put方法?

以下是WebApiConfig.cs中的路由配置: config.Routes.MapHttpRoute( name: “DefaultApiPut”, routeTemplate: “api/{controller}”, defaults: new { httpMethod = new HttpMethodConstraint(HttpMethod.Put) } ); config.Routes.MapHttpRoute( name: “DefaultApi”, routeTemplate: “api/{controller}/{id}”, defaults: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get, HttpMethod.Post, HttpMethod.Delete) } ); 这是我的控制器: public class MyController : ApiController { [HttpPut] public void Put() { //blah } } 不知何故,当客户端使用URL /api/myController/12345发出PUT请求时,它仍然映射到MyController的Put方法,我预计会出现类似资源的错误。 如何强制Put方法只接受没有参数的请求? 提前致谢!

在Web API中的id参数之后使用操作进行路由

在web api中,默认路由是: /api/locations/123?days=5 config.Routes.MapHttpRoute( name: “DefaultApi”, routeTemplate: “api/{controller}/{id}”, defaults: new { id = RouteParameter.Optional } ); 但是,如果我希望路径看起来像这样/api/locations/123/events?days=5同时仍然可以使用类似这样的路径命中LocationsController /api/locations/123?state=md 控制器: public class LocationsController : ApiController { // GET api/locations/123/events?days=5 public IEnumerable GetEventsByDays(int idLocation, int days) { // do stuff } // GET api/locations/123?state=md public IEnumerable GetLocationsByState(string state) { // do stuff } } 这里真的有两个问题: 有一个返回事件的LocationsController或者是否应该有一个完全独立的控制器是否有意义? 如何设置WebApiConfig的路由以允许这样的路由?

Route属性中的正则表达式 – RESTful API ASP.NET Web API

我在Route属性中遇到了正则表达式的问题。 我想创建RESTful API,您可以在其中指定URL中的开始日期和结束日期以过滤结果。 我到现在所做的是: [HttpGet] [Route(“date/{startDate:datetime:regex(\\d{4}-\\d{2}-\\d{2})}/{*endDate:datetime:regex(\\d{4}-\\d{2}-\\d{2})}”)] [Route(“date/{startDate:datetime:regex(\\d{4}/\\d{2}/\\d{2})}/{*endDate:datetime:regex(\\d{4}/\\d{2}/\\d{2})}”)] public IEnumerable GetRecommendationByDate(DateTime startDate, DateTime? endDate) { var output = db.Recommendations .Where(r => r.IsPublished == true && r.CreatedDate.CompareTo(startDate) > 0 && r.CreatedDate.CompareTo(endDate.HasValue ? endDate.Value : DateTime.Now) r.LastModified) .ToList(); return output; } 它不是我想要的,因为第二个参数应该是可空的。 当我只通过开始日期时,我得到404.使用斜杠格式也不起作用。 我究竟做错了什么? 我以为*意味着参数可以为空… ===编辑=== 我要匹配的url都是: https:// localhost:post / api / recommendations / date / 10/07/2013 / […]

在WebAPI中定义两个get函数

当我试图在MVC WebAPI中调用GET函数时,我将遵循exception {“$id”:”1″,”Message”:”An error has occurred.”, “ExceptionMessage”:”Multiple actions were found that match the request: \r\nSystem.Xml.XmlNode Get(Int32, System.String) 我认为问题是因为两个get函数我定义了两个函数: 一: [HttpGet] public XmlNode Get(int id, string Tokken) { //Do something } 第二个 [HttpGet] public List GetUsersInteractions(int? activityID, string Tokken) { // Do Something } 路线配置 config.Routes.MapHttpRoute( name: “DefaultApi”, routeTemplate: “api/{controller}/{id}”, defaults: new { id = RouteParameter.Optional […]

如何使用MVC路由多语言URL

我需要现有控制器的多语言URL路由。 让我解释一下: 我有一个名为“Product”的控制器和名为“Software”的View; 因此,默认情况下,如果用户输入“ http://example.com/en/Product/Software ”,请获取正确的内容(实际存在于http://example.com/Product/Software中 ), 但是,如果另一个用户 – 法国用户 – 键入“ http://example.com/fr/Produits/logiciels ”,则必须获得控制器并显示正确的内容(同样http://example.com/Product/软件,但有法语文本)。 注意:我使用“{language} / {controller} / {action} / {id}”设置路由表 任何其他无效的url都必须显示404页面。 可能吗?