小编qui*_*qui的帖子

允许使用ASP-MVC和表单身份验证访问特定页面

以下是我的视图的目录布局的简单概述:

项目

  • 第1页
  • 第2页
  • RSS

问题

  • 第1页
  • 第2页
  • RSS

我正在使用表单身份验证来拒绝所有未经身份验证的用户访问,这很好.但是,我希望能够向所有人授予访问RSS视图的权限(因此他们可以通过谷歌阅读器和东西订阅)

我了解您可以通过将以下页面添加到web.config来授予对页面的访问权限

  <location path="TOURPAGE.aspx">
<system.web>
  <authorization>
    <allow users="*" />
    <allow users="?" />
  </authorization>
</system.web>
Run Code Online (Sandbox Code Playgroud)

但是,我如何使用动态制作的URL进行此操作,例如:

Issues/RSS/chrisj
Run Code Online (Sandbox Code Playgroud)
  • 该路径映射到称为RSS的问题中的控制器,该问题采用用户名并吐出其问题的RSS ...

编辑

我认为已经修复了一些答案,但是:

看来,至少在我的情况下,您仍然需要身份验证cookie才能看到该页面.只要你有cookie,就可以注销并查看它.

这对我来说不好,我需要页面完全公开,因为它是一个RSS提要.

security asp.net-mvc forms-authentication

5
推荐指数
1
解决办法
6389
查看次数

ASP MVC中的自定义错误处理

我想超越ASP mvc中给出的默认错误处理.我有一个错误控制器,所以我希望根据发生的事情给出不同的错误消息:即无效的参数,权限被拒绝,OMG DATABASE DEAD等.

但我似乎无法解决如何做到这一点,这是我尝试过的:

[HandleError(View="/Errors/InvalidArgument",ExceptionType=typeof(ArgumentException))]
Run Code Online (Sandbox Code Playgroud)

它最终导致运行时错误.

此外,在同一主题上,是否可以添加更多可以传递给错误控制器的参数,例如:

[HandleError(View="/Errors/InvalidArgument",ExceptionType=typeof(ArgumentException), Error="dumb arguments")]
Run Code Online (Sandbox Code Playgroud)

谢谢

error-handling asp.net-mvc

5
推荐指数
1
解决办法
3121
查看次数

LINQ to SQL手动选择相关的表数据(SELECT N + 1问题)

数据库示例:

图像 - ImageTag - 标记

图像可以有多个标签.关系设置很好,但我遇到了性能问题.

我有许多不同的查询,根据不同的标准选择图像.它们工作正常,但是不会使用这些查询选择标记的数据.

这意味着如果我遍历10个图像的列表并尝试访问其标记对象(通过ImageTag),则在我的数据库上为每个图像执行新的查询.

<%foreach (LINQRepositories.Image i in Model)
  { %>

   <li><%=i.title%>
    <ul>
        <%foreach(ImageTag t in i.ImageTags){ %>
            <li><%=t.Tag.name%></li>
        <%} %>
    </ul>
   </li> 

<%} %>
Run Code Online (Sandbox Code Playgroud)

这显然不太理想.有没有办法强制LINQ to SQL查询某些数据?

以下是我的一个查询示例

public static IQueryable<Image> WithTags(this IQueryable<Image> qry, IEnumerable<Tag> tags)
{
    return
        from i in qry
        from iTags in i.ImageTags
        where tags.Contains(iTags.Tag)
        select i;
}
Run Code Online (Sandbox Code Playgroud)

编辑

尝试dataload选项后,这是一个生成的示例查询

{SELECT [t0].[id],[t0].[title],[t0].[legend],[t0].[dateAdded],[t0].[删除],[t0].[averageRating], [t0].[numberOfVotes],[t0].[imageOfTheWeek],[t0].[copyright],[t0].[copyrightText],[t0].[areaOfInterest],[t0].[typeId],[t0 ].[authorId],[t0].[editorialStatusId],[t0].[comments] FROM [dbo].[Image] AS [t0] CROSS JOIN([dbo].[ImageTag] AS [t1] INNER JOIN [ dbo].[Tag] AS [t2] ON [t2].[id] = …

c# linq performance linq-to-sql

5
推荐指数
1
解决办法
1934
查看次数

为什么我的LINQ语句返回IEnumerable?

我有两个非常相似的方法:

public IQueryable<User> Find(Func<User, bool> exp)
{
    return db.Users.Where(exp);
}

public IQueryable<User> All()
{
    return db.Users.Where(x => !x.deleted);
}
Run Code Online (Sandbox Code Playgroud)

顶部的一个,不会编译,说它返回IEnumerable而不是IQueryable.

为什么是这样?

此外,我知道我可以在最后添加"AsQueryable()",它将工作.虽然这有什么不同?任何表演命中?我知道IQueryable延迟执行等等,我还能获得这个好处吗?

c# iqueryable linq-to-sql

5
推荐指数
1
解决办法
311
查看次数

LINQ union带有可选的null第二个参数

我有两个查询返回同一类对象的集合,在完成这两个查询之后,我想将它们联合起来.

var results = from t in All()
              where t.Blah.Contains(blahblah)
              select t;

var results2 = from t in All()
               where t.blah2.contains(blahblah)
               select t;

return results.Union(results2);
Run Code Online (Sandbox Code Playgroud)

这是有可能的是,第二个查询可能返回任何结果,并且是null.

看起来如果我尝试与两者进行联合,如果第二个参数为null,它将抛出一个ArgumentNullException.

显而易见的答案是只对.ToList()第二个查询执行以查看它是否包含任何内容.这个问题是我试图利用延迟执行,并且不想在此阶段实际执行数据库上的查询.

有没有办法解决?

编辑 - 解决方案

var results2 = from t in All()
        where t.blah2!=null && t.blah2.Contains(blahblah)
        select t;
Run Code Online (Sandbox Code Playgroud)

基本上,当我尝试在空列表上执行包含时,实际查询返回null

谢谢您的帮助!

c# linq union

5
推荐指数
2
解决办法
6084
查看次数

将接口作为参数传递给扩展方法

我使用扩展方法扩展html助手来制作RSS转发器:

    public static string RSSRepeater(this HtmlHelper html, IEnumerable<IRSSable> rss)
    {
        string result="";

        foreach (IRSSable item in rss)
        {
            result += "<item>" + item.GetRSSItem().InnerXml + "</item>";
        }

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

所以我让我的一个业务对象实现IRSSable,并尝试将其传递给HTML帮助器.但我似乎无法使它工作,我尝试过:

<%=Html.RSSRepeater(ViewData.Model.GetIssues(null, null, "") as IEnumerable<IRSSable>) %>
Run Code Online (Sandbox Code Playgroud)

编译正常,但传递null

<%=Html.RSSRepeater(ViewData.Model.GetIssues(null, null, "")) %>
Run Code Online (Sandbox Code Playgroud)

Intellisense抱怨无法将IEnumerable问题传递给IEnumberable IRSSable

  • 你是怎么做到的?我正在调用的那种方法IEnumberable<Issue>肯定会返回并且问题肯定会实现IRSSAble

c# asp.net-mvc extension-methods interface

4
推荐指数
1
解决办法
2426
查看次数

IEnumerable.Except不会工作,所以我该怎么办?

我有一个linq to sql数据库.非常简化,我们有3个表,项目和用户.有一个名为User_Projects的连接表将它们连接在一起.

我已经有了一种获取IEnumberable<Project>给定用户的工作方法.

from up in User_Projects
select up.Project;
Run Code Online (Sandbox Code Playgroud)

现在我想获得用户没有参与的项目.我认为IEnumerable的except方法在这里会很不错:

return db.Projects.Except(GetProjects());
Run Code Online (Sandbox Code Playgroud)

编译但是我得到一个运行时错误:"除了Contains()运算符之外,本地序列不能用于查询运算符的LINQ to SQL实现."

有没有办法解决这个问题?


更新:

一些观点,但没有答案:p

我试过这个:

        IEnumerable<Project> allProjects = db.Projects;
        IEnumerable<Project> userProjects = GetProjects();
        return allProjects.Except(GetProjects());
Run Code Online (Sandbox Code Playgroud)

我知道它与原始语句基本相同 - 但现在我没有得到运行时错误.不幸的是,它并没有真正做除了部分,只是因为某些原因返回所有项目

c# linq

4
推荐指数
1
解决办法
3074
查看次数

ASP MVC中的视图中的权限

我了解您可以使用表单身份验证根据您选择的条件授予/拒绝对某些页面的访问权限.

但是我希望比这更具体一点,并且说,根据用户的权限为用户显示不同的按钮.

我知道我可以做点什么

if(((User)ViewData["CurrentUser"]).IsEmployee).....
Run Code Online (Sandbox Code Playgroud)

但这似乎并不优雅,很快就会变得混乱.

是否有任何指南/工具/框架功能可以帮助我在这里?

permissions asp.net-mvc user-interface

4
推荐指数
1
解决办法
3226
查看次数

UILabel和上标

我有两个字符串:

  • 一段可变长度的文字
  • 另一个带有指向引用的数字的字符串

在我看来,第一段文字显示在UILabel中,我调整标签的大小以适应文本的大小.这意味着我不能只在屏幕上放置另一个UILabel,至少在没有重新定位的情况下......不知何故.

我需要能够把第二段文本放在句子的末尾 - 并且上标

我真的不知道如何实现这个目标!

iphone objective-c uilabel

4
推荐指数
1
解决办法
2502
查看次数

在表单提交CasperJS中发送http标头

我有一个CasperJS的测试步骤,它执行以下操作:

this.fillSelectors("#registration-form", {
    "#first-name": "Bob",
    "#last-name": "Smith",
    "#email-address": RANDOM_EMAIL,
    "#password": PASSWORD,
    "#password-confirm": PASSWORD
}, true);
Run Code Online (Sandbox Code Playgroud)

我希望能够发送HTTP标头.如果没有"手动"发布表单,我似乎无法找到这样做的方法,这不是我想要的那种测试.

javascript form-submit http-headers phantomjs casperjs

4
推荐指数
1
解决办法
3395
查看次数