任何人能解释的区别Server.MapPath(".")
,Server.MapPath("~")
,Server.MapPath(@"\")
和Server.MapPath("/")
?
从ASP.NET MVC项目中的Controller查找App_Data文件夹的绝对路径的正确方法是什么?我希望能够临时使用.xml文件,我不想硬编码路径.
这不起作用:
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
string path = VirtualPathUtility.ToAbsolute("~/App_Data/somedata.xml");
//.... do whatever
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
我认为在Web上下文之外VirtualPathUtility.ToAbsolute()不起作用.字符串路径返回"C:\ App_Data\somedata.xml"
我应该在哪里确定MVC应用程序中.xml文件的路径?global.asax并坚持使用应用程序级变量?
由于Microsoft Web API不是MVC,因此您无法执行以下操作:
var a = Request.MapPath("~");
Run Code Online (Sandbox Code Playgroud)
也不是这个
var b = Server.MapPath("~");
Run Code Online (Sandbox Code Playgroud)
因为它们在System.Web
命名空间下,而不是System.Web.Http
命名空间.
那么如何计算Web API中的相对服务器路径?
我曾经在MVC中做过类似的事情:
var myFile = Request.MapPath("~/Content/pics/" + filename);
Run Code Online (Sandbox Code Playgroud)
哪个会给我磁盘上的绝对路径:
"C:\inetpub\wwwroot\myWebFolder\Content\pics\mypic.jpg"
Run Code Online (Sandbox Code Playgroud) 我正在构建一个ASP.NET MVC站点,我正在使用Lucene.Net进行搜索查询.我在这里问了一个关于如何在ASP.NET MVC应用程序中正确构建Lucene.Net用法的问题,并被告知最好的方法是将my声明IndexWriter
为public static
,以便可以重用它.
以下是我的SearchController顶部的一些代码:
public static string IndexLocation = Server.MapPath("~/lucene");
public static Lucene.Net.Analysis.Standard.StandardAnalyzer analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer();
public static IndexWriter writer = new IndexWriter(IndexLocation,analyzer);
Run Code Online (Sandbox Code Playgroud)
由于writer
是静态的,IndexLocation
也必须是静态的.因此,编译器给出了以下错误Server.MapPath()
:
非静态字段,方法或属性'System.Web.Mvc.Controller.Server.get'需要对象引用
有没有办法在静态字段中使用Server.MapPath()或类似的东西?我该如何解决这个错误?
我正在使用System.IO.Directory.GetCurrentDirectory()来获取我的Web服务中的当前目录,但这不会给我当前目录.如何获取Web服务中的当前目录?
谢谢斯图尔特
按照ASP.NET上的教程,实现了一个Web API控制器方法,用于执行如下所示的异步文件上载:
public Task<HttpResponseMessage> PostFormData()
{
// Check if the request contains multipart/form-data.
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
// Read the form data and return an async task.
var task = Request.Content.ReadAsMultipartAsync(provider).
ContinueWith<HttpResponseMessage>(t =>
{
if (t.IsFaulted || t.IsCanceled)
{
Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception);
}
return Request.CreateResponse(HttpStatusCode.OK);
});
return task;
}
Run Code Online (Sandbox Code Playgroud)
通过标准的多部分HTML表单上传文件非常有效.但是,当另一个开发人员尝试通过Flex的FileReference类构造的多部分表单上载文件时,会抛出错误:
MIME多部分流的意外结束.MIME多部分消息未完成.
我不知道问题出在Web API或Flex上.我找到了一些没有任何影响的相关修复程序(使用ASP.Net Web API的多部分表单POST),最近发现了这一个("多部分流.MIME多部分消息未完成"webapi上传错误).如果第二个链接成立,是否有人知道它是否在通过Nuget提供的当前版本的Web API中出现?讨论是在5月份,Nuget的最新版本是8月,所以我认为这个修补程序已经部署,并不是我的问题的根本原因.
我有一个Quartz作业,Application_Start
在此期间设置Global.asax.cs
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
Logger.log("About to Setup Retry Job");
JobScheduler.Start();
}
Run Code Online (Sandbox Code Playgroud)
这会调用该Start
方法,然后调度作业.
作业每20秒运行一次并抛出异常.这是我的工作.
public class RetryTempJob : IJob
{
public async Task Execute(IJobExecutionContext context)
{
try
{
Logger.log("Executing Job");
new ProcessOrder().retryFailedOrders();
//Logger.log("Done Executing Syspro Job");
await Console.Error.WriteLineAsync("Done Executing Syspro Job");
}
catch (Exception se)
{
await Console.Error.WriteLineAsync("" + se.InnerException);
}
}
}
Run Code Online (Sandbox Code Playgroud)
此行引发异常Logger.log("Executing Job");
.这是一个静态方法,它打开一个日志文件并写入它.此方法适用于我的网站中的其他位置.
以下是异常消息:{"对象引用未设置为对象的实例."}
InnerException为NULL.这是堆栈:
DarwinsShoppingCart.dll!DarwinsShoppingCart.SharedClasses.JobScheduler.RetrySyspro.Execute(Quartz.IJobExecutionContext context) Line 69 C#
Quartz.dll!Quartz.Core.JobRunShell.Run(System.Threading.CancellationToken cancellationToken) Unknown
mscorlib.dll!System.Runtime.CompilerServices.AsyncTaskMethodBuilder.Start<Quartz.Core.JobRunShell.<Run>d__9>(ref Quartz.Core.JobRunShell.<Run>d__9 stateMachine) Unknown
Quartz.dll!Quartz.Core.JobRunShell.Run(System.Threading.CancellationToken cancellationToken) …
Run Code Online (Sandbox Code Playgroud) 这篇MSDN文章说:
HttpContext: Current is always null when accessed from within a WCF service. Use RequestContext instead.
我要做的是从我的IIS托管WCF服务加载一些XSD文件.问题是,我无法弄清楚如何在任何旧的vanilla ASP.NET网站中执行Server.MapPath(),例如:
HttpContext.Current.Server.MapPath(schemaUri);
在IIS托管的WCF服务中使用RequestContext的等效方法是什么?
模式位于服务应用程序根目录下的"模式"目录中.它们是使用web.config中的自定义配置部分引用的,如下所示:
<schemas>
<add uri="~/Schemas/foo.xsd" xmlNamespace="http://foo.bar/types" />
</schemas>
Run Code Online (Sandbox Code Playgroud)
我试图像这样加载:
var schemaUri = HttpContext.Current.Server.MapPath(schema.Uri);
从普通的ASP.NET网站中可以正常工作,而不是IIS托管的WCF服务.
我们有一个用ASP.NET 3.5编写的Web应用程序.在其中,我们访问代码隐藏中的文件.(普通的C#文件访问,在页面生命周期中在服务器上完成,这与URL或Web浏览器无关).
在我们的生产系统上,我们在web.config中指定了相关文件的完整路径.我们希望能够在版本控制中的项目中包含该文件的本地副本,然后使用版本控制的web.config中的相对路径指向它,以便签出的副本应用程序可以在Visual Studio的调试器中运行,而无需进行任何配置.
问题是当Web应用程序在调试模式下运行时,其工作目录既不是项目也不是解决方案目录.在Windows或控制台应用程序中,在项目的属性页面中,我可以设置工作目录.但在Web应用程序中我不能.
关于如何设法使这项工作的任何想法?
我有一个Windows服务,它使用类库中的方法与相同的asp.net解决方案.在类库中,我有一个方法如下:
reader = XmlReader.Create(HttpContext.Current.Server
.MapPath("~/TestDevice/Data.xml"), settings);
Run Code Online (Sandbox Code Playgroud)
当控制来到这条线.我得到例外.我试图调试代码,发现当服务尝试访问此方法时,HttpContext.Current.Server
就是null
.什么是替代语法.
我试图从Web应用程序访问此类库方法,它工作正常.
请建议解决方案.
我正在使用VS 2012开发Asp.Net MVC 4应用程序.在本地运行的应用程序使用IIS Express作为Web服务器.我在尝试访问作为我的解决方案一部分的文件时遇到问题.我有以下操作方法:
public FileContentResult GetImage()
{
byte[] imageByte = System.IO.File.ReadAllBytes(@"/MyPics/My.jpg");
string contentType = "image/jpeg";
return File(imageByte, contentType);
}
Run Code Online (Sandbox Code Playgroud)
在第一行中,我收到以下错误:
Could not find a part of the path 'C:\Program Files (x86)\IIS Express\~\MyPics\My.jpg'
Run Code Online (Sandbox Code Playgroud)
我知道上面的路径不正确,但我无法理解为解决这个问题我应该提供什么路径.
关心Pawan Mishra
asp.net ×6
c# ×6
asp.net-mvc ×3
.net ×2
apache-flex ×1
directory ×1
filesystems ×1
iis-express ×1
lucene.net ×1
mapping ×1
path ×1
quartz.net ×1
static ×1
wcf ×1
web-services ×1
xsd ×1