tôi dường như không thể có được một tùy chỉnh VirtualPathProvider làm việc trong asp.net MVC 5.VirtualPathProvider trong MVC 5
Phương pháp FileExists trả về true nhưng sau đó các phương pháp getfile không được gọi. Tôi tin rằng điều này là do IIS tiếp quản yêu cầu và không cho phép .NET xử lý nó.
Tôi đã thử đặt RAMMFAR và tạo trình xử lý tùy chỉnh, như trong giải pháp https://stackoverflow.com/a/12151501/801189 nhưng vẫn không có may mắn. Tôi nhận được một lỗi 404.
Provider Tuỳ chỉnh của tôi:
public class DbPathProvider : VirtualPathProvider
{
public DbPathProvider() : base()
{
}
private static bool IsContentPath(string virtualPath)
{
var checkPath = VirtualPathUtility.ToAppRelative(virtualPath);
return checkPath.StartsWith("~/CMS/", StringComparison.InvariantCultureIgnoreCase);
}
public override bool FileExists(string virtualPath)
{
return IsContentPath(virtualPath) || base.FileExists(virtualPath);
}
public override VirtualFile GetFile(string virtualPath)
{
return IsContentPath(virtualPath) ? new DbVirtualFile(virtualPath) : base.GetFile(virtualPath);
}
public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart)
{
return null;
}
public override String GetFileHash(String virtualPath, IEnumerable virtualPathDependencies)
{
return Guid.NewGuid().ToString();
}
}
My Tuỳ chỉnh tập tin ảo:
public class DbVirtualFile : VirtualFile
{
public DbVirtualFile(string path): base(path)
{
}
public override System.IO.Stream Open()
{
string testPage = "This is a test!";
return new System.IO.MemoryStream(System.Text.ASCIIEncoding.ASCII.GetBytes(testPage));
}
}
web.config handler Tôi đã cố gắng để sử dụng, nhưng không thành công. Nó hiện đang cung cấp cho lỗi 500:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="FormsAuthenticationModule" />
</modules>
<handlers>
<add name="ApiURIs-ISAPI-Integrated-4.0"
path="/CMS/*"
verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="runtimeVersionv4.0" />
</handlers>
Nếu tôi cố gắng hướng đến site.com/CMS/Home/Index, phương pháp FileExists được gọi nhưng kỳ lạ, các tham số recieves VirtualPath chỉ ~/CMS/Nhà.
Thêm điểm ngắt, có vẻ như đối với url site.com/CMS/Home/Index, phương pháp FileExists liên tục được gọi. Điều này có thể gây ra một đệ quy vô hạn, gây ra lỗi máy chủ nội bộ.
Bạn trả lời là hữu ích. Tôi nhận được mã của tôi làm việc, tuy nhiên quan điểm là không để render sau khi "System.IO.Stream Open()". Bạn có gặp phải vấn đề tương tự không? –
Không, tôi không tin tôi đã làm. Bạn đang thấy lỗi gì? –
Chỉ cần một html trống được hiển thị sau khi mở(). Mở() thành công được xem từ DB –