1

我将 nopcommerce 解决方案上传到 appharbor (使用此方法Can't build notcommerce project under appharbor)并成功构建了解决方案,但我收到 403 错误 - 禁止访问:尝试打开页面时拒绝访问(设置了对文件系统的写访问权限)为真)。

感谢并希望您的帮助

4

3 回答 3

2

我们在我们的基本控制器中使用一个包装器来确保我们所有的代码都不会注意到 appharbor 端口的变化。

首先,修复 Webhelper.cs:75

public virtual string GetThisPageUrl(bool includeQueryString, bool useSsl)
        {
            string url = string.Empty;
            if (_httpContext == null)
                return url;

            if (includeQueryString)
            {
                string storeHost = GetStoreHost(useSsl);
                if (storeHost.EndsWith("/"))
                    storeHost = storeHost.Substring(0, storeHost.Length - 1);
                url = storeHost + _httpContext.Request.RawUrl;
            }
            else
            {
#if DEBUG
                var uri = _httpContext.Request.Url;

#else
                //Since appharbor changes port number due to multiple servers, we need to ensure port = 80 as in AppHarborRequesWrapper.cs
                var uri = new UriBuilder
                {
                    Scheme = _httpContext.Request.Url.Scheme,
                    Host = _httpContext.Request.Url.Host,
                    Port = 80,
                    Path = _httpContext.Request.Url.AbsolutePath,
                    Fragment = _httpContext.Request.Url.Fragment,
                    Query = _httpContext.Request.Url.Query.Replace("?", "")
                }.Uri;
#endif
                url = uri.GetLeftPart(UriPartial.Path);
            }
            url = url.ToLowerInvariant();
            return url;
        }

所以我们所做的只是将https://gist.github.com/1158264中的文件添加到 Nop.Core\AppHarbor

和修改过的基本控制器:

  • nopcommerce\Presentation\Nop.Web\Controllers\BaseNopController.cs

    public class BaseNopController : Controller
    {
        protected override void Initialize(RequestContext requestContext)
        {
            //Source: https://gist.github.com/1158264
            base.Initialize(new RequestContext(new AppHarborHttpContextWrapper(System.Web.HttpContext.Current),
                                               requestContext.RouteData));
        }
        //Same file from here downwards...
    }
    
  • nopcommerce\Presentation\Nop.Web.Admin\Controllers\BaseNopController.cs

    public class BaseNopController : Controller
    {
    protected override void Initialize(System.Web.Routing.RequestContext requestContext)
    {
        //set work context to admin mode
        EngineContext.Current.Resolve<IWorkContext>().IsAdmin = true;
    
        //Source: https://gist.github.com/1158264
        base.Initialize(new RequestContext(new AppHarborHttpContextWrapper(System.Web.HttpContext.Current), requestContext.RouteData));
    
        //base.Initialize(requestContext);
    }
        //Same file from here downwards...
    }
    
于 2012-04-24T08:52:49.877 回答
2

问题是标准的 NopCommerce 解决方案包含两个 Web 项目。AppHarbor 只为每个应用程序部署一个 Web 项目,在这种情况下,我们碰巧部署Nop.Admin的不是您想要的。

要解决此问题,您应该利用AppHarbor 解决方案文件约定并创建一个AppHarbor.sln仅引用Nop.Web项目的解决方案文件。

于 2011-12-27T16:43:06.200 回答
1

在 IIS Express 中启用目录浏览功能

注意 此方法适用于在使用 IIS Express 时遇到问题的 Web 开发人员。

为此,请按照下列步骤操作: 打开命令提示符,然后转到计算机上的 IIS Express 文件夹。例如,在命令提示符下转到以下文件夹:C:\Program Files\IIS Express 键入以下命令,然后按 Enter:appcmd set config /section:directoryBrowse /enabled:true

参考:https : //support.microsoft.com/en-us/kb/942062

于 2015-12-12T20:37:48.873 回答