.NET Framework
HTTP सर्वर
खोज…
बेसिक रीड-ओनली HTTP फ़ाइल सर्वर (HttpListener)
टिप्पणियाँ:
यह उदाहरण प्रशासनिक मोड में चलाया जाना चाहिए।
केवल एक साथ ग्राहक का समर्थन किया जाता है।
सादगी के लिए, फ़ाइलनाम को सभी ASCII ( सामग्री-विवाद शीर्षक में फ़ाइलनाम भाग के लिए) माना जाता है और फ़ाइल पहुंच त्रुटियों को नियंत्रित नहीं किया जाता है।
using System;
using System.IO;
using System.Net;
class HttpFileServer
{
private static HttpListenerResponse response;
private static HttpListener listener;
private static string baseFilesystemPath;
static void Main(string[] args)
{
if (!HttpListener.IsSupported)
{
Console.WriteLine(
"*** HttpListener requires at least Windows XP SP2 or Windows Server 2003.");
return;
}
if(args.Length < 2)
{
Console.WriteLine("Basic read-only HTTP file server");
Console.WriteLine();
Console.WriteLine("Usage: httpfileserver <base filesystem path> <port>");
Console.WriteLine("Request format: http://url:port/path/to/file.ext");
return;
}
baseFilesystemPath = Path.GetFullPath(args[0]);
var port = int.Parse(args[1]);
listener = new HttpListener();
listener.Prefixes.Add("http://*:" + port + "/");
listener.Start();
Console.WriteLine("--- Server stated, base path is: " + baseFilesystemPath);
Console.WriteLine("--- Listening, exit with Ctrl-C");
try
{
ServerLoop();
}
catch(Exception ex)
{
Console.WriteLine(ex);
if(response != null)
{
SendErrorResponse(500, "Internal server error");
}
}
}
static void ServerLoop()
{
while(true)
{
var context = listener.GetContext();
var request = context.Request;
response = context.Response;
var fileName = request.RawUrl.Substring(1);
Console.WriteLine(
"--- Got {0} request for: {1}",
request.HttpMethod, fileName);
if (request.HttpMethod.ToUpper() != "GET")
{
SendErrorResponse(405, "Method must be GET");
continue;
}
var fullFilePath = Path.Combine(baseFilesystemPath, fileName);
if(!File.Exists(fullFilePath))
{
SendErrorResponse(404, "File not found");
continue;
}
Console.Write(" Sending file...");
using (var fileStream = File.OpenRead(fullFilePath))
{
response.ContentType = "application/octet-stream";
response.ContentLength64 = (new FileInfo(fullFilePath)).Length;
response.AddHeader(
"Content-Disposition",
"Attachment; filename=\"" + Path.GetFileName(fullFilePath) + "\"");
fileStream.CopyTo(response.OutputStream);
}
response.OutputStream.Close();
response = null;
Console.WriteLine(" Ok!");
}
}
static void SendErrorResponse(int statusCode, string statusResponse)
{
response.ContentLength64 = 0;
response.StatusCode = statusCode;
response.StatusDescription = statusResponse;
response.OutputStream.Close();
Console.WriteLine("*** Sent error: {0} {1}", statusCode, statusResponse);
}
}
बेसिक रीड-ओनली HTTP फाइल सर्वर (ASP.NET Core)
1 - एक खाली फ़ोल्डर बनाएं, इसमें अगले चरणों में बनाई गई फाइलें होंगी।
2 - निम्नलिखित सामग्री के साथ project.json
नामक एक फ़ाइल बनाएं (पोर्ट संख्या और rootDirectory
को उपयुक्त के रूप में समायोजित करें):
{
"dependencies": {
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
"Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final"
},
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel --server.urls http://localhost:60000"
},
"frameworks": {
"dnxcore50": { }
},
"fileServer": {
"rootDirectory": "c:\\users\\username\\Documents"
}
}
3 - निम्नलिखित कोड के साथ Startup.cs
नामक एक फ़ाइल बनाएं:
using System;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.FileProviders;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.StaticFiles;
using Microsoft.Extensions.Configuration;
public class Startup
{
public void Configure(IApplicationBuilder app)
{
var builder = new ConfigurationBuilder();
builder.AddJsonFile("project.json");
var config = builder.Build();
var rootDirectory = config["fileServer:rootDirectory"];
Console.WriteLine("File server root directory: " + rootDirectory);
var fileProvider = new PhysicalFileProvider(rootDirectory);
var options = new StaticFileOptions();
options.ServeUnknownFileTypes = true;
options.FileProvider = fileProvider;
options.OnPrepareResponse = context =>
{
context.Context.Response.ContentType = "application/octet-stream";
context.Context.Response.Headers.Add(
"Content-Disposition",
$"Attachment; filename=\"{context.File.Name}\"");
};
app.UseStaticFiles(options);
}
}
4 - एक कमांड प्रॉम्प्ट खोलें, फ़ोल्डर में नेविगेट करें और निष्पादित करें:
dnvm use 1.0.0-rc1-final -r coreclr -p
dnu restore
नोट: इन आदेशों को केवल एक बार चलाने की आवश्यकता है। कोर CLR के नवीनतम इंस्टॉल किए गए संस्करण की वास्तविक संख्या की जांच करने के लिए dnvm list
का उपयोग करें।
5 - सर्वर को इसके साथ शुरू करें: dnx web
। फाइलें अब http://localhost:60000/path/to/file.ext
पर मांगी जा सकती हैं।
सादगी के लिए, फ़ाइलनाम को सभी ASCII (सामग्री-विवाद शीर्षक में फ़ाइलनाम भाग के लिए) माना जाता है और फ़ाइल पहुंच त्रुटियों को नियंत्रित नहीं किया जाता है।