My Asp.Net MVC project's folder structure is as shown above.Could you tell me how to access the web project's event-images folder from the webapi project ?
I have implemented where I can access the webapi's event-images folder as shown below. Now I need to access web project's event-imagesfolder.How can I do that ? Thanks in advance.
var path = System.Web.Hosting.HostingEnvironment.MapPath("~");
var pathToEventImage= path + "\\Resources\\images\\event-images\\"
How about:
HostingEnvironment.ApplicationPhysicalPath
Described here: msdn
And then navigating to the Web project from there.
Another way is to go to Resources in the API project right click on the folder and choose Add -> Existing Item.. then browse the Web folder and have it in both projects
Another way (if the Web project is also hosted) is to browse it by
URL. For example http://localhost:1337/Web/Resources/images/event-images/doge.png
OP's Solution : I have done the way which #Pap mentioned.That is :
You should have all your images in the "event-images" folder in your
API project and then have a method to access them(in the API project,
should be part of your API).
Related
I'm developing ASP.NET Core 3.1 Web API and have my swagger setup. I have added swagger documentation to my project.
Right click API Project -> Build -> Output
This will generate xxx.xml file in my project root folder.
Right click -> xxx.xml -> Copy To Output Directory -> Copy Always
I refer the xxx.xml file in the swagger config in Startup.cs as follows
var xmlCommentsFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlCommentsFullPath = Path.Combine(AppContext.BaseDirectory, xmlCommentsFile);
options.IncludeXmlComments(xmlCommentsFullPath);
Here I should use AppContext.BaseDirectory or Assembly.GetEntryAssembly().Location?
While running this in my local development, I can see this going inside bin\Debug\netcoreapp3.1\ but after publish folder structure will be same?. So correct path will be selected after publish and deploy?
System.AppContext.BaseDirectory should point to the folder that contains the managed entry point assembly, whether that is bin\Debug\netcoreapp3.1\, bin\x64\release\netcoreapp3.1\ or somewhere else.
You can for example use this property to get the actual location of a single-file executable that gets extracted from one folder and copied into another temp folder before being run.
Edit
I just downloaded the source code of the tutorial project from GitHub. When I build and run the project, I see that the Website/Modules/ folder is copied into the bin/Debug folder of the Service project. But this does not happen when I build my Service project.
What could be the reason?
I am following the tutorial in this link.
I have completed the part until the index.html is added and should show Nancy is working! when the webpage is loaded.
I had to change the ViewLocationConventions to
$"../../../Service.Website/Website/Modules/{context.ModuleName}/views/{viewName}"
Only then everything works fine with Nancy 1.x version. Why doesn't it work when I use
$"Website/Modules/{context.ModuleName}/views/{viewName}"
like in the tutorial?
And when I use Nancy 2.x, it cannot find the view file at all. No matter what I set ViewLocationConventions to.
i.e., it still looks for the Website/Modules/Root/view/index.html file in the Service project.
Any other workaround, other than moving the view files itself to the Service project?
Quick background of the tutorial:
The solution has 2 projects Service and Service.Website as shown below.
Service is a Topshelf service that hosts a server that runs the web project
Service.Website is a web project using Owin and Nancy
Thanks to #hellyale's comment, I had to set the Copy to Output Directory of the index.html file to Copy always.
This then copies the file to the bin/Debug folder and Nancy is now able to find the view.
I'm having a "tiny" issue with my App_Code folders.
I'm learning ASP.NET and, therefore, ordered a webserver with the support of ASP.NET 4.0. I'm using Visual Web Developer to program my webpages. When I upload my website to this webserver everything runs fine.
However, if I then add another web project to my server, my App_Code folder gets all messy. The server wants all my class files in the App_Code folder in the root. Is there any way I can create subdirectories in my App_Code folder or something to keep my projects organized or am I missing the point here?
You should take a look at codeSubDirectories in the web.config
Alright I found a solution to my problem. Although most of your answers might work aswell, this proved to be the best in my case. I created a subdomain and threw all files into that folder and it worked fine.
You should try to avoid using the App_Code folder for your own stuff, especially if you're using a web application project.
Whenever you convert a website to a web application project, the process actually renames your existing App_Code directory to Old_App_Code.
See Here, even though this is specific to converting .net 2.0 apps, I believe it still holds true in 4.0 since converting a 4.0 app does the same thing.:
VERY, VERY IMPORTANT: Because ASP.NET 2.0 tries to dynamically compile any classes it finds under the /App_Code directory of an application at runtime, you explictly DO NOT want to store classes that you compile as part of your VS 2005 Web Application Project under an "app_code" folder. If you do this, then the class will get compiled twice -- once as part of the VS 2005 Web Application Project assembly, and then again at runtime by ASP.NET. The result will most likely be a "could not load type" runtime exception -- caused because you have duplicate type names in your application. Instead, you should store your class files in any other directory of your project other than one named "app_code". This will be handled automatically by the "Convert to Web Applicaiton" command. This command will rename the folder Old_App_Code.
If you have access to a hosting control panel it's probably best to configure your hosting environment with a virtual folder for your second website and run it from the sub folder, e.g. www.example.com/project-b. The first site can still be running in the root folder, e.g. www.example.com.
So both sites will essentially be isolated from each other (just like they are now isolated as two separate projects in Visual Web Developer Express). And both sites have their own App_Code folder (and web.config file).
If you don't have access to a configuration panel, most hosting providers are willing to add a virtual folder for you, since it's really not a special requirement.
The virtual folder should show up as a regular folder in your FTP folder, usually inside the www or wwwroot folder. Now you can copy your project files into that folder.
Take care to use root-relative paths for URLs in your second project, so all links will work even when the website is run from the subfolder. Root-relative URLs look like this:
<asp:HyperLink runat="server" NavigateUrl="~/Default.aspx" />
<asp:Image runat="server" NavigateUrl="~/images/logo.png" />
This will automatically go to www.example.com/project-b/Default.aspx and www.example.com/project-b/images/logo.png when the website is deployed in the virtual folder.
If you need to re-use code from one site in the other, it's typically best to move such code into a separate Class Library project type, and then add a reference to that project to each website project (right-click the website project, choose Add reference..., then select the Projects tab and select the Class Library project).
I am running a CMS as an ASP.NET WebApplication and want to automatically include all files generated by the CMS in the project folder to be included in the project.
By default they are excluded, and finding them by hand and including them every time a new file is created is annoying.
Is it possible to include new files in the web application folder by default?
Web Site Projects work that way, however I am not sure why you would want CMS generated content in your source code repository.
i try to learn learn Dynamic Data Entties . i see some sample about it. they try to teach some codes in App_code. i really want to learn where is my Ap_code?
Web Applications do not use the App_Code folder, only Web Sites. If you want to use the App_Code folder create a Web Site instead of a new Web Application.
If you want to use a Web Application you can place the .dbml file anywhere, you'll just have to fully qualify (with namespaces) the DataContext wherever you want to use it (ex: in the Global.asax file).
It seems it is not possible to create the app_code folder. Take a look at the bottom of this page in the community content part. There are a lot of people with the same problem.
SOLUTION: add the .dbml to file root of the site
As mentioned above, a web app project does not create an App_Code folder by default. You can create one using the solution explorer though if you want - right click on web project, new folder..., name it App_Code.