小编Jus*_*zer的帖子

IIS 7.0/Windows Server 2008上的ASP.NET MVC 3应用程序出现404.0错误

我正在尝试将ASP.NET MVC 3应用程序部署到Windows 2008 x64服​​务器(显然运行IIS 7.0),并且IIS似乎不希望正确地提供内容.所有请求都导致404.0错误,因为请求与任何处理程序都不匹配,并且IIS正在尝试使用StaticFile处理程序来提供请求.这个问题似乎与.NET 4.0有关,因为我有一个MVC 2应用程序在为.NET 2.0运行时配置的应用程序池中运行得很好.

在Windows 7和Windows Server 2008 R2上将此相同的应用程序部署到IIS 7.5服务器时,我没有遇到任何问题.

在部署之前,2008服务器没有安装.NET 4.0或ASP.NET MVC 3,因此以下是我在部署应用程序之前执行的步骤:

  1. 安装了.NET 4.0
  2. 跑aspnet_regiis.exe(来自Framework64/v4.0.30319文件夹)
  3. 使用Web平台安装程序安装ASP.NET MVC 3
  4. 应用MS更新KB980368以使某些IIS 7.0或IIS 7.5处理程序能够处理其URL不以句点结尾的请求

对应用程序中的静态资源(JavaScript文件,图像等)的请求顺利通过,但对MVC操作的任何请求都会因404.0错误而失败.我注意到IIS正在使用StaticFile处理程序来处理这些请求,这显然是不正确的.据我所知,ASP.NET 4.0处理程序(即ExtensionlessUrl-ISAPI-4.0*处理程序)已正确定义,因此我不知道为什么/如何处理这些处理程序不会处理请求并且将落在所有处理程序中一直到StaticFile处理程序.

我还遇到了以下MS知识库文章,其中提到您应确保在遇到404错误的服务器上启用/安装HTTP重定向和静态内容压缩.我检查了,我的服务器已经启用了这两个功能.我甚至尝试删除并重新安装功能无济于事.

在这一点上,我完全没有想到为什么这不能正常工作.我能够在2个不同的IIS 7.0服务器上复制该问题.我错过了什么?

iis-7 .net-4.0 windows-server-2008 asp.net-4.0 asp.net-mvc-3

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

如果在单个HTML文档中多次使用具有相同"src"属性的<script>标记会发生什么?

虽然我几乎可以肯定这个问题的答案是浏览器特定的,但是当使用多个<script>标签并具有相同的src属性时,是否有任何浏览器定义行为?

例如...

<script src="../js/foo.js"></script>
...

<!-- what happens here? -->
<script src="../js/foo.js"></script>
Run Code Online (Sandbox Code Playgroud)

我首先提出这个问题的原因是,在我的特定情况下,我在使用JQuery的ASP.NET MVC应用程序中使用部分视图.JQuery JS文件都通过脚本标记包含在主模板文件中.我更喜欢将脚本标记添加到部分视图文件中,以便在主模板的上下文之外使用它们时,它们将自动包含所有必需的JS文件,而不依赖于另一个视图或模板来包含它们.但是,我当然不希望导致JS文件多次转移到客户端,或任何其他可能对用户体验产生负面影响的副作用.

我现在的想法是,大多数(如果不是全部)主要浏览器(FF,Safari,IE,Opera)将在第一次使用时缓存JS文件,然后在后续脚本标签上浏览器将使用缓存副本如果可用且未过期.但是,缓存行为通常可以通过浏览器配置进行更改,因此依赖任何类型的缓存行为似乎都不太"安全".

我是否必须接受这样的事实,即我的部分视图将依赖于其他模板或视图,包括适当的JS文件?

html javascript asp.net-mvc

17
推荐指数
1
解决办法
8155
查看次数

ASP.NET Windows角色提供程序(AspNetWindowsTokenRoleProvider)未注意到用户被添加到新组

我正在尝试创建一个应用程序,该应用程序使用<authorization>规则来限制有权访问应用程序的组.我正在使用Windows身份验证和ASP.NET的Windows角色提供程序(AspNetWindowsTokenRoleProvider).我正在使用本地组来定义角色,作为我正在开发的域,以及应用最终将部署到的域将是不同的.

当我最初设置将我的应用程序部署到IIS7服务器,并且我将站点设置为使用基本身份验证时,使用正确的默认域,一切都适用于已分配给授权组的用户.但是,当我尝试将新用户添加到任何授权组时,该用户从未被授权访问该应用程序.除了重启机器外,我已经做了一切.我重新启动IIS以及删除客户端上的所有临时文件和cookie,但无济于事.

应该说这是一个ASP.Net MVC应用程序,虽然我认为这不会产生任何影响.以下是我的web.config中的相关条目:

<!-- use windows authentication -->
<authentication mode="Windows" />

<!-- use the Windows role provider -->    
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" />

<!-- global authorization rules -->
<authorization>
    <allow roles="admins,contractors"/>
    <deny users="*" />
</authorization>
Run Code Online (Sandbox Code Playgroud)

例如,假设我们有一个用户"Domain\joe",它目前不是本地"admins"组的成员,但我们想要添加他.我们去添加他,然后当Joe尝试登录时,他看到一个错误,他没有被授权(在多次登录尝试失败后).没有任何数量的IIS重新启动或Joe删除他的cookie和其他临时文件将解决此问题.

ASP.Net是否保留某种秘密角色/组缓存?如何将新用户添加到组中,然后确保角色提供程序将看到用户已添加到组中?

c# asp.net

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

为什么使用DSOFile库设置的自定义文件属性在保存后不会保留?

我目前正在开发一个AutoCAD插件,允许用户与文档版本控制应用程序进行交互,为了在远程存储库和本地机器之间同步文件,我计划使用自定义文件属性.最初下载文件时将设置属性,然后只要文件保留在用户的本地驱动器上,就会保留该属性.我对AutoCAD特定的解决方案并不感兴趣,因为我的插件将处理AutoCAD绘图以外的文件(文本文件,图像文件等).因此,我想要一个可以处理尽可能多的潜在文件类型的库.

当在C#中搜索如何实现这种事情时,我几乎立即遇到了DSOFile库.我读到的所有内容都说它是为MS Office设计的,但它应该适用于任何文件,只要文件系统是NTFS(至少这是我的理解).我在文本上设置自定义属性没有问题,例如纯文本文档(.txt),AutoCAD图形(.dwg)和图像(.jpg,.tif等).但是,我注意到,一旦保存了这些文件,自定义属性就会被删除.我看到自定义属性的唯一情况是在保存后保留,在MS Office文档中.我认为这个问题与我用来保存文件的应用程序(AutoCAD,MS Paint,记事本等)有关,但我无法100%肯定.在我决定采用除DSOFile之外的其他解决方案之前,我想看看SO上是否有人对此问题有所了解.

我使用自己的代码测试并使用DSOFile附带的演示,并且两次都看到相同的结果.保存除MS Office(Word和Excel)文档之外的任何类型的文件后,自定义属性被清除.

这是一个类似于我将用于添加新自定义属性的代码的示例...

var docProperties = new OleDocumentProperties();
docProperties.Open("myfile.txt", false, dsoFileOpenOptions.dsoOptionDefault);

try
{
  object value = "some value";
  docProperties.CustomProperties.Add("MyCustomProp", ref value);
}

finally
{
  docProperties.Close(true); // save and close
}
Run Code Online (Sandbox Code Playgroud)

.net c# ms-office

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

为什么hgweb.cgi没有列出使用mercurial 1.7或1.8创建的存储库?

我在Windows 2003服务器(IIS 6,Python 2.6.6)上运行hgweb.cgi,并且在我最近从mercurial 1.6升级到1.7和1.8(客户端和中央服务器)之前一直没有问题.我在服务器上有一个包含所有中央存储库的目录,该目录在hgweb.config文件中设置为"集合".即使在服务器上升级到mercurial 1.8之后,hgweb.cgi也只会列出使用mercurial 1.6或更早版本创建的存储库.未列出使用1.7或1.8创建的任何存储库.尝试直接访问1.7或1.8存储库会导致显示以下错误消息:

处理您的请求时发生错误:

要求'dotencode'不受支持

看起来这个问题与使用mercurial 1.6的hgweb.cgi有关,但是由于我卸载1.6并在服务器上安装了1.8,这怎么可能呢?python目录中的某个库文件是否需要更换/升级?我错过了什么?

我正在使用webapp安装1.8后创建的mercurial 目录中的文件,只根据需要修改hgweb.cgi和hgweb.config.

mercurial hgweb

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

在多个部分视图中拆分单个表单被认为是不好的做法吗?

我目前正在开发一个ASP.NET MVC 3应用程序,我有一个特定的视图,它设置为向导(使用jQuery插件).每个向导步骤都是单个表单的一部分,其中每个"步骤"被拆分为它自己的<div>元素.我决定为每个"步骤"的内容创建部分视图.我这样做有几个原因.一个是它保持每个步骤的代码整洁有序.另一个是它允许我更容易/巧妙地在服务器端包含或排除向导中的步骤.

现在,我的"主要"视图如下所示:

@using (Html.BeginForm)
{
    <div class="step" id="step1">
        @Html.Partial("Step1")
    </div>

    <div class="step" id="step2">
        @Html.Partial("Step2")
    </div>
}
Run Code Online (Sandbox Code Playgroud)

我想知道如果做这样的事情会被认为是不好的做法,如果我只是将所有"步骤"的代码合并到一个视图中?

c# asp.net-mvc

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