Я положил dll в папку bin и установил web.config, но все равно не работает - PullRequest
0 голосов
/ 12 декабря 2018

Я скомпилировал мой C # файл, получаю мою dll.

    using System;
using System.Web;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;

namespace ImageHandler{
    public class HttpImageHandler: IHttpHandler{
    int Width = 0;
    int Height = 0;

    public void ProcessRequest(System.Web.HttpContext context)
    {
    if(context.Request.Params["height"] != null){
        try{
        Height = int.Parse(context.Request.Params["height"]);
        }catch{
        Height = 0;
        }
    }

    if(context.Request.Params["width"] != null){
        try{
        Width = int.Parse(context.Request.Params["width"]);
        }catch{
        Width = 0;
        }
    }

    if (Width <= 0 && Height <=0)
    {               
        context.Response.Clear();
        context.Response.ContentType = 
        getContentType(context.Request.PhysicalPath);
        context.Response.WriteFile(context.Request.PhysicalPath);
        context.Response.End();
    }
    else 
    {
        context.Response.Clear();
        context.Response.ContentType = 
        getContentType(context.Request.PhysicalPath);
        byte[] buffer = 
        getResizedImage(context.Request.PhysicalPath,Width,Height);
        context.Response.OutputStream.Write
        (buffer, 0, buffer.Length);
        context.Response.End();
    }
    }

    public bool IsReusable{
        get{
        return false;
        }
    }

    byte[] getResizedImage(String path ,int width,int height)
    {
        Bitmap imgIn = new Bitmap(path);
        double y  = imgIn.Height;
        double x  = imgIn.Width;

        double factor = 1;
        if(width > 0){
        factor = width/x;
        }else if (height>0){
        factor = height/y;
        }
        System.IO.MemoryStream outStream = 
        new System.IO.MemoryStream();
        Bitmap imgOut = 
        new Bitmap((int)(x * factor),(int)(y * factor));
        Graphics g = Graphics.FromImage(imgOut);
        g.Clear(Color.White);
        g.DrawImage(imgIn,new Rectangle(0,0,(int)(factor * x),
        (int)(factor * y)),
        new Rectangle(0,0,(int)x,(int)y),GraphicsUnit.Pixel);

        imgOut.Save(outStream, getImageFormat(path));
        return outStream.ToArray();
    }  

    string getContentType(String path){
        switch (Path.GetExtension(path)) {
        case ".bmp": return "Image/bmp";
        case ".gif": return "Image/gif";
        case ".jpg": return "Image/jpeg";
        case ".png": return "Image/png";
        default :  break;
        }
        return "";
    }

    ImageFormat getImageFormat(String path){
        switch (Path.GetExtension(path)) {
        case ".bmp": return ImageFormat.Bmp;
        case ".gif": return ImageFormat.Gif;
        case ".jpg": return ImageFormat.Jpeg;
        case ".png": return ImageFormat.Png;
        default :  break;
        }
        return ImageFormat.Jpeg;
    }
    }
}

Затем я поместил свой ImageHandler.dll в папку bin.Я установил веб-конфигурацию.

<configuration>
<system.web>
    <customErrors mode="Off" />
    <compilation debug="true" />    
    <httpHandlers>
        <add verb="*" path="*.bmp" type="ImageHandler.HttpImageHandler,ImageHandler"/>
        <add verb="*" path="*.jpg" type="ImageHandler.HttpImageHandler,ImageHandler"/>
        <add verb="*" path="*.gif" type="ImageHandler.HttpImageHandler,ImageHandler"/>
        <add verb="*" path="*.png" type="ImageHandler.HttpImageHandler,ImageHandler"/>
    </httpHandlers>
</system.web>

И, наконец, я попытался вызвать мое изображение с новым сжатием.

<img src="/images/exaple.png?width=200px">

Но это не такничего такого.Я нашел в Google одного парня, который говорил о том, чтобы поместить в web.config и добавить руководство в IIS в окне «Добавить / изменить расширение приложения». Сопоставляя некоторых сотрудников, он сказал и то, и другое, но у меня есть IIS10, и он другой, я пыталсядобавить карту сценариев в сопоставление обработчиков, но ничего не делает.

Что не так?Большое спасибо

...