当我点击MVC页面上的链接时,我无法打开文件。我收到以下消息。我在代码中添加了模拟。我可以删除并保存文件。
拒绝访问路径'\ servername \ folder1 \ folder2 \ folder3 \ foder4 \ filename.pdf'。
描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.UnauthorizedAccessException:拒绝访问路径'......与上面相同....
ASP.NET无权访问所请求的资源。考虑将资源的访问权限授予ASP.NET请求标识。 ASP.NET具有基本进程标识(通常是IIS 5上的{MACHINE} \ ASPNET或IIS 6上的网络服务),如果应用程序未模拟,则使用该标识。如果应用程序通过
<identity impersonate="true"/>
模拟,则标识将是匿名用户(通常为IUSR_MACHINENAME)或经过身份验证的请求用户。要授予对文件的ASP.NET访问权限,请在资源管理器中右键单击该文件,选择“属性”,然后选择“安全”选项卡。单击“添加”以添加适当的用户或组。突出显示ASP.NET帐户,并选中所需访问的框。
来源错误:
Line 35: ' This gets executed for every action on this controller Line 36: ViewData("READONLY") = IIf(SessionData.IsReadOnly, "Y", "N") Line 37: MyBase.Execute(requestContext) Line 38: End Sub Line 39:
源文件:C:\ Posfx \ trunk \ posfx \ camonline \ Controllers \ ApplicationController.vb行:37
堆栈追踪:
[UnauthorizedAccessException: Access to the path '\\cambridge-uat-d\NetworkShare\DealDocumentShare\201102\online\136-test file 2.pdf' is denied.] System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +7716623 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) +1162 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) +66 System.Web.HttpResponse.TransmitFile(String filename, Int64 offset, Int64 length) +134 System.Web.HttpResponse.TransmitFile(String filename) +12 System.Web.HttpResponseWrapper.TransmitFile(String filename) +11 System.Web.Mvc.FilePathResult.WriteFile(HttpResponseBase response) +37 System.Web.Mvc.FileResult.ExecuteResult(ControllerContext context) +268 System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +10 System.Web.Mvc.<>c__DisplayClass11.<InvokeActionResultWithFilters>b__e() +20 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +251 System.Web.Mvc.<>c__DisplayClass13.<InvokeActionResultWithFilters>b__10() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +251 System.Web.Mvc.<>c__DisplayClass13.<InvokeActionResultWithFilters>b__10() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +251 System.Web.Mvc.<>c__DisplayClass13.<InvokeActionResultWithFilters>b__10() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +178 System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +399 System.Web.Mvc.Controller.ExecuteCore() +126 System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +27 Cambridge.Online.ApplicationController.Execute(RequestContext requestContext) in C:\Posfx\trunk\posfx\camonline\Controllers\ApplicationController.vb:37 System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +7 System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext) +151 System.Web.Mvc.MvcHandler.ProcessRequest(HttpContext httpContext) +57 System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) +7 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75
答案 0 :(得分:1)
我认为错误信息不仅仅是明确的,它甚至会告诉你该做什么很少见。您的网站在具有有限权限的特殊帐户下运行。根据您使用的IIS版本,此帐户可能会有所不同。因此,您应该考虑将此帐户的读取权限授予您尝试访问的远程文件夹,根据您获得的例外情况\servername\folder1\folder2\folder3\foder4
。
您说您已添加模仿,但模拟仅适用于本地资源。在您的情况下,您似乎正在尝试访问远程服务器(远程共享)。在这种情况下,您需要委派而不是模仿。因此,您可以将站点配置为在对此远程共享具有读取权限的域帐户下运行。