我正在寻找一种方法(轻松,优先;))创建一个单独的文件服务器上的文件的下载链接.
情况如下:我正在开发的应用程序(vb.net中的asp.net 2.0,但我在c#中有类似的问题,无论哪种解决方案适用于我)都将在公司内部运行.好的做法是,文件存储和Web应用程序位于两个单独的服务器上.
我基本上需要能够创建一个文件的下载链接,我必须访问该文件的唯一可用URL是\ servername\folder1\folder2\folder3\file.txt(可以是任何类型的文件)
Weblinks根本不起作用.这是它目前的设置方式:
tablerowfield.Text = String.Format(
"<a href=""\\servername\folder1\folder2\folder3\{0}""
target=""_blank"">Click me</a>",
filename)
Run Code Online (Sandbox Code Playgroud)
由于显而易见的原因,这不起作用.它曾经被设置为将该文件写入应用程序路径本身并且完美地工作,但这不是好的做法,这就是我改变它(或尝试)的原因.
我阅读了有关创建下载页面的解决方案,然后在数据库中有一个表格,其中包含链接并返回适当的Web URL以供下载,但遗憾的是我面临的时间限制不允许我开发它.
假设我可以像上面那样为文件提供一个包含完整文件路径的字符串,那么创建链接的最简单方法是什么?单击时,下载文档?
注意:我在此环境中拥有0个管理员权限.这真的没有帮助我.让我们假设我得到了如上所述的正确链接,并拥有相应的文件访问权限等.
更新:
以上示例适用于IE,但不适用于Firefox和Chrome.IE将其转换为file:// servername/...链接,它可以实现预期,但FF和Chrome都主动决定这是不安全的,并已从浏览器中禁用它.
我有一个Datatables没有正确使用其x轴滚动的问题.
我以前遇到过IE9'鬼细胞'问题,我能解决这个问题.但是,现在我遇到的问题是我的overflow-x被显示,而不是隐藏它并使窗口可滚动.
我的数据表初始化:
var oTable = $('#tableBP').dataTable({
"bJQueryUI": true,
"sScrollX": "100%",
"sScrollXInner": "200%",
"sScrollY": 300,
"bScrollCollapse": false,
"bFilter": true,
"bSort": false,
"bInfo": false,
"bPaginate": false
});
//This is a Datatables plugin. The issue occurs whether I comment this part or not.
new FixedColumns(oTable, {
"iLeftWidth": 225
});
Run Code Online (Sandbox Code Playgroud)
这就是我面临的问题:
它虽然在IE9兼容模式下工作.不幸的是,页面的其他部分不允许我运行这是一个较低的版本兼容性,但这显然标志着它只是一个IE9问题.Chrome,Safari,Opera,Firefox都没有问题.
我不会在这里发布表格,因为它的大小(在某些情况下为2000+ td字段).它是一个完全有效的HTML表格,带有thead/tbody,并且标签之间的所有空格都被删除了(这就是修复我之前的鬼细胞问题).
任何人都有数据表的经验,并知道这个问题的根本原因?
PS:这是一个MVC2应用程序(C#.Net),但这个问题似乎与生成此网页的应用程序无关.
更新
我忘了提到以下部分:
该表曾经正确显示; 但是由于IE9在大表中的ghost单元格问题,我被迫清除了table/thead/tbody/tr/td标签之间的所有空格.我通过在我的aplication的HTML输出上强制使用正则表达式替换来解决这个问题:
// response is the string with my HTML output which will be written to the browser after this:
string expression = @">[ \t\r\n\v\f]*<td"; …
Run Code Online (Sandbox Code Playgroud) 我创建了一个自定义库,它会自动为依赖于HttpClient
.
这是使用IServiceCollection
扩展方法和类型化客户端方法来完成的。一个简化的例子:
public static IHttpClientBuilder SetUpFooServiceHttpClient(this IServiceCollection services)
{
return services
.AddHttpClient<FooService>()
.AddPolicyHandler(GetRetryPolicy());
}
Run Code Online (Sandbox Code Playgroud)
示例服务:
public class FooService
{
private readonly HttpClient _client;
// OPTION 1
public FooService(HttpClient httpClient)
{
_client = httpClient;
}
// OPTION 2
public FooService(IHttpClientFactory httpClientFactory)
{
_client = httpClientFactory.CreateClient(GetType().Name);
}
public void DoJob()
{
var test = _client.GetAsync("http://example.com");
}
}
Run Code Online (Sandbox Code Playgroud)
从 DI 容器中获取服务(来自测试项目):
var services = new ServiceCollection();
services.SetUpFooServiceHttpClient();
services.AddSingleton<FooService>();
var fooService = services
.BuildServiceProvider()
.GetRequiredService<FooService>();
// Perform test
fooService.DoJob();
Run Code Online (Sandbox Code Playgroud)
注意:在这个测试项目中,我还添加了一个额外的模拟处理程序,因为我试图模拟 …
我已经在互联网上浏览这个问题相当长一段时间了,但我得到的与重写 LINQ 方法有关的结果要少得多。我不确定是否可以做到,但我想知道是否有人可以确认这是否有效,或者提出替代方案。
情况如下(当然针对这个问题进行了简化)
我们使用 EF6 Code First 来构建我们的数据库。我们添加了一个自定义(抽象)基类,所有实体均从中派生。该基类实现了我们用于审核的一些字段(创建日期、创建者、修改日期……),但我们还通过在基类中添加IsDeleted (bool) 属性来实现软删除系统。
据我们的应用程序所知,IsDeleted
绝不能返回带有 == true 的项。
DataModel 如下(再次简化)
Company
---> 1 Company has many Departments
Department
---> 1 Department has many Adresses
Address
Run Code Online (Sandbox Code Playgroud)
过去,我尝试创建一个通用的检索方法,通过创建对 DataContext 中的表的“覆盖”(也是一个自定义类,因为它自动处理审核字段)来消除 IsDeleted 对象。
对于在 DataContext 中找到的每个表:
public DbSet<Company> Companies { get; set; }
Run Code Online (Sandbox Code Playgroud)
我们添加了第二个表,仅返回未删除的项目。
public IQueryable<Company> _Companies
{
get { return this.Companies .Where(co => !co.IsDeleted); }
}
Run Code Online (Sandbox Code Playgroud)
所以我们调用MyDataContext._Companies
而不是MyDataContext.Companies
. 这按预期工作。它很好地过滤掉了已删除的项目。
然而,我们注意到随后的声明却并非如此.Include()
。如果我打电话:
var companies = MyDataContext._Companies.Include(x => x.Departments);
//... …
Run Code Online (Sandbox Code Playgroud) 我遇到了PHP的问题,因为它一直在标题中引用Exception.它在以下行失败:
$item->getDescription();
Run Code Online (Sandbox Code Playgroud)
我理解错误应该是什么意思($item
是null).但是,$ item不为null.
方案如下:这是一个将供应商的产品同步到商店的脚本.为此,我创建了自己的类(SimpleProduct).这个类有一个getDescription()函数.
问题是我收到的数据往往有很多垃圾,就像尚未填写的物品一样.该脚本应跳过这些项目并继续迭代其余产品.这个致命的错误会杀死整个脚本.
我已经尝试过实施保护措施来防止这种情况发生,但它仍然会不断发生.这是当前的代码(删除了一些片段,因为它们与当前案例无关).
//This is part of a class that performs the sync
public function syncProduct($item) {
if(empty($item)) { return "Not a product"; }
else { var_dump($item) }
$foo = $item->getDescription();
}
Run Code Online (Sandbox Code Playgroud)
当检查var_dump结果时,我得到一个填充了一些值的对象.看到它是正确的类型(SimpleProduct)并且它不是空/ null,我怀疑这个错误停止发生,但它仍然存在.
另请注意,在弹出这个产品之前,已经发生了几个没有任何错误的产品同步,所以我知道代码是有效的.不知何故,这个特定情况滑过我的空检查.
我的空检是否有问题?当有问题的对象存在时,如何抛出非对象的错误?
我很难描述标题中的问题,如果标题不是最清楚的话,对不起.
假设我有以下接口/类:
public interface IAction { /*...*/ }
public class WriteAction : IAction { /*...*/ }
public class ReadAction : IAction { /*...*/ }
Run Code Online (Sandbox Code Playgroud)
现在,这些操作将用于其他类.ReadWriteTest
可以同时ReadAction
和WriteAction
对象,但ReadTest
只能有ReadAction
对象.
请注意,这些测试对象不仅仅是这个,我正在编写其他功能,因为它们与问题无关.
两个xxxTest
类共享一个通用接口.所以接口和ReadWriteTest
类的实现如下:
public interface ITest
{
List<IAction> Actions { get; set; }
}
public class ReadWriteTest : ITest
{
public List<IAction> Actions { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
问题是,对于ReadTest
类,我想将此属性限制为仅包含ReadAction
元素.
我试图实现的是以下内容:
public class ReadTest : ITest
{
public List<ReadAction> …
Run Code Online (Sandbox Code Playgroud) 我遇到的错误如下:
在我的页面右侧,我有一个有趣的点列表(显示在页面左侧的地图上).因为列表太长了,我使用的是iScroll 4(很棒的插件).
但是,我想要做的是在用户滚动列表时触发事件,这样我就可以检查用户当前可以看到哪些项目.iScroll已经设置了一个事件,所以我有一个在需要时触发的功能.但是,我似乎无法获得列表项的正确坐标.
会发生什么是以下情况:
我怎样才能获得实际坐标?
我已经阅读过Func<>
,它说它是一个委托,你可以使用它,例如:
Func<class,bool>
Run Code Online (Sandbox Code Playgroud)
意味着你发送一个类或任何东西,并得到一个bool结果,这就是我得到的!但以下是什么意思?
Func<Class, bool> predicate
Run Code Online (Sandbox Code Playgroud)
我不知道,你能告诉我吗?
我发现很难用英语描述这个,因为它不是我的第一语言所以我希望问题/标题有意义.
我需要知道我是否可以创建一个可以返回实现中任何类型的方法的接口.
我想制作一个可以注入另一个类的通用映射器.但我想知道我是否可以制作通用映射器,或者我是否需要为不同类型制作不同的接口.对我来说,制作相同但只有不同返回类型的不同接口看起来毫无意义?
有点像这样:
public interface IMapper()
{
T MapObject() where T = the return type
List<T> MapList() where T = the return type;
}
public class OrderMapper : IMapper()
{
OrderDetails MapObject()
{
mapping code...
return OrderDetails;
}
}
public class CustomerMapper : IMapper()
{
CustomerDetails MapObject()
{
mapping code...
return CustomerDetails;
}
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?或者我只是迟钝,我需要制作不同的接口.
我正在尝试将多个实体异步添加到我的数据库中,作为集成测试的“排列”部分。
但是,我的原始代码出现了双重条目:
private async Task<Foo[]> GenerateFoos(params string[] names)
{
var tasks = names.Select(async name =>
{
var foo = new Foo() { Name = name };
await AddAsync(foo);
return foo;
});
await Task.WhenAll(tasks);
return tasks.Select(task => task.Result).ToArray();
}
[Test]
public async Task MyTest()
{
var expected = await GenerateFoos("A", "B", "C");
}
Run Code Online (Sandbox Code Playgroud)
它在我的数据库中生成两倍数量的对象(每个对象两个),我不知道为什么。
我在网上查找了其他示例,但它们都假设 async 方法(AddAsync
在我的例子中)返回我想要返回的对象,但这里的情况并非如此;asAddAsync
只返回 ID,但我想返回添加的对象本身。
我已经重新编写了两次代码,这两个替代方案不会插入重复项:
// Alternative 1
var result = new List<Corporation>();
foreach (var name in names)
{
var foo= new Foo() …
Run Code Online (Sandbox Code Playgroud)