小编Sco*_*ott的帖子

如何确定任意URL是否与定义的路由匹配

如何判断字符串是否与特定的命名路由匹配?

我有这样的路线:

routes.MapRoute(
    "FindYourNewRental",
    "find-your-new-rental/{market}/{community}.html",
    new { controller = "FindYourNewRental", action = "Community" }
    );

string url = "http://www.website.com/find-your-new-rental/northerncalifornia/sacramento.html"
Run Code Online (Sandbox Code Playgroud)

如何以编程方式判断'url'字符串是否与该路由匹配?像这样的东西:

// matches url with the named route "FindYourNewRental"
if (IsRouteMatch(url, "FindYourNewRental")) 
{
    // do something
}

public bool IsRouteMatch(string url, string routeName)
{
     // How do I code this function
}
Run Code Online (Sandbox Code Playgroud)

c# url asp.net-mvc routing asp.net-mvc-routing

16
推荐指数
1
解决办法
6504
查看次数

使用自定义消息的MVC 3 AuthorizeAttribute重定向

如何创建自定义AuthorizeAttribute,以字符串参数的形式指定消息,然后将其传递到登录页面?

例如,理想情况下执行此操作会很酷:

[Authorize(Message = "Access to the blah blah function requires login. Please login or create an account")]
public ActionResult SomeAction()
{
    return View();
}
Run Code Online (Sandbox Code Playgroud)

然后,在Login操作中,我可以这样做:

public ActionResult Login(string message = "")
{
    ViewData.Message = message;

    return View();
}
Run Code Online (Sandbox Code Playgroud)

最后在视图中我可以这样做:

@if (!String.IsNullOrEmpty(ViewData.Message))
{
    <div class="message">@ViewData.Message</div>
}

<form> blah blah </form>
Run Code Online (Sandbox Code Playgroud)

基本上我想将自定义消息传递到登录页面,以便我可以显示特定于用户在该特定时间尝试访问的消息.

c# asp.net-mvc authorization asp.net-mvc-3

15
推荐指数
1
解决办法
1万
查看次数

将IEnumerable参数传递给WebAPI

我开始使用WebAPI,并且大部分都进​​展顺利.我遇到了一个特定功能的问题.这个与另一个不同,因为它的唯一参数是IEnumerable类型.

我在Post()函数的第一行设置了一个断点,我正在点击该函数但是"values"参数ALWAYS的计数为0.我验证了客户端的参数输入了,实际上,包含一个整数数组.如果我删除[FromUri]属性,则'values'参数为NULL而不是0.

如何在我的WebAPI函数中获取整数数组?

这是WebAPI函数:

[System.Web.Mvc.HttpPost]
public void Post([FromUri] IEnumerable<int> values)
{
    if (values == null || !values.Any()) return;

    int sortorder = 1;
    foreach (int photoId in values)
    {
        _horseRepository.UpdateSortOrder(photoId, sortorder);
        sortorder++;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是AJAX调用(这是使用jQuery UI Sortable功能):

$(".sortable").sortable({
    update: function (event, ui) {
                var newArray = $(".sortable").sortable("toArray");

                $.ajax({
                    url: '/api/photo',
                    type: 'POST',
                    contentType: 'application/json, charset=utf-8',
                    async: true,
                    dataType: 'json',
                    data: JSON.stringify(newArray),
                    complete: function (data) { }
                });
            }
        });
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc jquery asp.net-web-api

13
推荐指数
1
解决办法
1万
查看次数

SignalR 2.2客户端没有收到任何消息

我有一个在控制台应用程序环境中运行的自托管SignalR应用程序.我通过使用包装类连接到其中的集线器,以防止我必须从我的ASP.NET项目引用SignalR.Core程序集.所以它是我的应用程序中的另一个C#类,它负责向连接的客户端广播消息.

我可以直接从Javascript 调用PlanHub方法(RegisterUnregister),这些断点被击中.但是,当我从Hub外部的类调用客户端方法时(即使我Clients.All用来消除组注册的问题),客户端永远不会收到消息.我究竟做错了什么?

运行此代码时,我可以验证Clients.All.updateStatus(planId, message);代码是否被成功命中,但是没有任何内容记录到客户端的控制台上.

这是相关的代码:

PlanHub.cs

public class PlanHub : Hub
{
    private const string GroupPrefix = "PlanGroup_";

    public void Register(int companyId)
    {
        Groups.Add(Context.ConnectionId, $"{GroupPrefix}{companyId}");
    }

    public void Unregister(int companyId)
    {
        Groups.Remove(Context.ConnectionId, $"{GroupPrefix}{companyId}");
    }
}
Run Code Online (Sandbox Code Playgroud)

PlanPublisher.cs

public class PlanPublisher
{
    private readonly static Lazy<PlanPublisher> _instance = new Lazy<PlanPublisher>(() => 
        new PlanPublisher(GlobalHost.ConnectionManager.GetHubContext<PlanHub>().Clients));
    private IHubConnectionContext<dynamic> Clients { get; set; }

    private PlanPublisher(IHubConnectionContext<dynamic> clients)
    {
        Clients = clients;
    }

    public static PlanPublisher …
Run Code Online (Sandbox Code Playgroud)

javascript c# signalr

12
推荐指数
1
解决办法
4847
查看次数

jQuery $ .ajax调用同步执行而不是在调用WCF服务时同时执行

我有一个Web应用程序,其中包含一个页面,其中包含一个包含数百个字段的表单.更改任何字段会触发jQuery $ .ajax调用回服务器,以确定是否需要根据其新值将任何其他字段添加到表单中.换句话说,当一个字段发生变化时,它会检查是否需要将任何依赖字段添加到表单中.

这个过程有一些复杂性,因此,有时这些检查可能需要几秒钟.

问题是,如果一个字段位于其$ .ajax调用的中间,并且我在等待第一个字段完成时尝试更改另一个字段,则UI被阻止,我无法在页面上执行任何操作,直到第一次通话完成.就像UI一次只能处理一个$ .ajax调用一样.这是$ .ajax调用的副本:

$.ajax({
        type: "POST",
        async: true,
        url: serviceUrl,
        data: JSON.stringify(data),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        processdata: true,
        success: serviceSuccess,
        error: serviceFailed
    });
Run Code Online (Sandbox Code Playgroud)

serviceSuccess回调有很多复杂的代码更新UI,但我删除了所有的代码中它和问题仍然存在.我认为这与回调无关,因为它似乎在调用完成之前发生,但为了确定,我试了一下.

有没有人在使用jQuery $ .ajax之前听说过这样的事情?

编辑:我注意到从$ .ajax调用返回的响应大小约为130k.

编辑2: $ .ajax调用正在调用WCF服务.类定义现在看起来像这样:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class ReviewDataService : IReviewDataService, IReadOnlySessionState 
Run Code Online (Sandbox Code Playgroud)

解决方案:所以杰森绝对指出了我正确的方向.事实上,我的问题是由于ASP.NET会话锁定.为了解决这个问题,我必须从源自我的WCF服务的调用中消除调用堆栈中任何地方的Session的使用.另外,我将AspNetCompatibilityRequirementsMode设置为AspNetCompatibilityRequirementsMode.NotAllowed,并在web.config中的serviceHostingEnvironment元素中设置aspNetCompatibilityEnabled ="false".

这导致WCF在尝试访问Session时抛出错误,并且我将重构每个实例,以便它们不依赖于会话.之后,我的WCF调用开始并发运行而不是同步运行.

asp.net ajax jquery

11
推荐指数
1
解决办法
1313
查看次数

当文件实际存在于指定位置时的MVC路由

所以我在IIS 7下运行的MVC 3应用程序中有这样的路由:

routes.MapRoute(
               "VirtualTourConfig",
               "virtualtour/config.xml",
               new { controller = "VirtualTour", action = "Config" }
               );
Run Code Online (Sandbox Code Playgroud)

诀窍是文件实际存在于/virtualtour/config.xml中.似乎请求只是在该位置返回xml文件而不是命中路径,该路由处理XML,进行一些更改并返回自定义XmlResult.

有关如何告诉我的应用程序命中路由而不是文件存在于磁盘上的实际文件的任何建议?

编辑:似乎我可以使用routes.RouteExistingFiles = true;Global.asax的RegisterRoutes方法告诉应用程序忽略磁盘上的文件.但是,这会在全局范围内设置标志并在应用程序中中断许多其他请求.例如,我仍然希望调用/assets/css/site.css来返回CSS文件,而无需为每个静态资产专门设置路由.那么现在的问题是,有没有办法在每个路由的基础上做到这一点?

c# asp.net-mvc routing

9
推荐指数
1
解决办法
4757
查看次数

停止自定义验证器在每次击键时触发

我使用MVC DataAnnotations和jQuery不引人注目的javascript库编写了一个自定义验证器.它工作得很好.我现在唯一的问题是,在初始验证之后,如果用户编辑了该字段,则它会在每次击键时触发验证器.由于验证器访问Web服务以验证输入,我宁愿它只是在用户离开字段或提交表单时验证输入.有没有办法改变这种行为?这是我的代码:

<script type="text/javascript">
    $.validator.addMethod("validate_zipcode", function (value, element) {
        if (value == null || value.length == 0) {
            return true;
        }

        var isValid = false;
        $.ajax({
            async: false,
            dataType: "json",
            url: "/api/iszipvalid/" + value,
            success: function (response) {
                isValid = response;
            }
        });

        return isValid;
    });

    $.validator.unobtrusive.adapters.addBool('zipcode', 'validate_zipcode');
</script>
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc jquery unobtrusive-javascript

9
推荐指数
1
解决办法
3920
查看次数

将SVG转换为PNG或JPEG

目前有哪些方法可以使用C#以编程方式将SVG图像转换为PNG或JPEG?

我已经阅读了有关该主题的所有现有SO问题,所有这些问题都涉及使用外部流程来启动第三方程序.就我而言,这不是一个选项,因为我们很快就会迁移到Azure.

我需要做的是从磁盘加载SVG文件,理想情况下将其转换为我可以使用System.Drawing类进行操作的东西.

有任何想法吗?

c# svg image

9
推荐指数
2
解决办法
2万
查看次数

删除Facebook评论插件下方的空白区域

看看这个链接.向下滚动一下,您应该会看到一个Facebook评论插件,其下方嵌入了Google地图.

我的问题是,评论插件的底部和地图的顶部之间有大量的空白区域.Firebug表示空白区域位于评论插件的底部(与地图顶部相对).但是,我似乎无法找到消除它的方法.

我已经尝试过使用相对CSS定位将地图向上移动50个像素,但如果碰巧有任何问题,那么它就会位于评论之上.此外,如果用户关闭了FB注释,它也会拧紧布局.

关于如何摆脱过多的空白空间的任何想法?

更新:虽然这里提供的答案指出了我正确的方向,但它最终太麻烦了.我只是将Facebook评论放在页面底部的Google地图下面,这有点掩盖了问题.显然这是一个根据以下评论者之一的错误,所以我们只需要等待修复.

编辑:一直玩弄这些风格,没有运气.我最初可以根据杰森的建议改变盒子的高度,但是我做的任何事情都搞砸了布局(由于评论区域与原始高度保持相同的高度,新评论出现在地图后面,而不是允许Facebook动态增长添加注释时其IFRAME元素的高度).还有其他想法吗?

编辑#2:似乎问题的根源是Facebook自动为包含评论框的IFRAME分配200px的高度.添加评论后,Facebook会动态调整IFRAME的大小到适当的高度.如果我能找到一种方法使默认的200px从145px开始,我就能解决我的问题.不确定这是否可行,或者为什么Facebook认为200(任意?)是一个很好的高度开始.

编辑#3:我意识到白色空间来自Facebook生成的IFRAME,特别是我无能为力.我开始对这个问题给予赏金,因为:

1)我发现很难相信我是唯一一个对这种显示方式有问题的人.

2)这可能是由于我配置的方式?

3)我还没有想到其他一些解决方法.

希望赏金会鼓励一些创意回复!

html javascript css jquery facebook

8
推荐指数
1
解决办法
7266
查看次数

SQL组按日期范围内的频率

我需要编写一个接受开始日期,结束日期和频率(日,周,月,季,年)的存储过程,并根据这些参数输出结果集.显然,简单的部分是按日期范围查询,但是如何按频率分组?

所以,如果有一组这样的原始数据:

Date            Count
---------------------
11/15/2011          6
12/16/2011          9
12/17/2011          2
12/18/2011          1
12/18/2011          4
Run Code Online (Sandbox Code Playgroud)

我将这样的存储过程称为:

sp_Report'1/1/2011','12/31/2011','周'

我希望这样的结果:

WeekOf          Count
---------------------
11/19/2011          6
12/17/2011         11
12/24/2011          5
Run Code Online (Sandbox Code Playgroud)

这里有几个问题:

1)如何确定一周结束的日期(周日结束的一周)?

2)如何按WeekOf日期范围进行分组?

t-sql sql-server date-range

8
推荐指数
1
解决办法
6836
查看次数