如何使用URL末尾的点调用Web API操作?

时间:2015-08-28 09:38:19

标签: asp.net asp.net-web-api2

这是我研究从web api实现下载文件的link,我尝试使用这些URL下载文件

http://localhost:49932/api/simplefiles/1.zip< - 没有工作,找不到投诉方法 http://localhost:49932/api/simplefiles/1< - 能够调用操作名称,但为什么?

我知道如何处理导致失败的“.zip”扩展名,但我只是没有得到它并且不确定什么是错的,有人可以解释一下吗?

接口

public interface IFileProvider  
{
    bool Exists(string name);
    FileStream Open(string name);
    long GetLength(string name);
}

控制器

public class SimpleFilesController : ApiController  
{
    public IFileProvider FileProvider { get; set; }

    public SimpleFilesController()
    {
        FileProvider = new FileProvider();
    }

    public HttpResponseMessage Get(string fileName)
    {
        if (!FileProvider.Exists(fileName))
        {
            throw new HttpResponseException(HttpStatusCode.NotFound);
        }

        FileStream fileStream = FileProvider.Open(fileName);
        var response = new HttpResponseMessage();
        response.Content = new StreamContent(fileStream);
        response.Content.Headers.ContentDisposition
            = new ContentDispositionHeaderValue("attachment");
        response.Content.Headers.ContentDisposition.FileName = fileName;
        response.Content.Headers.ContentType
            = new MediaTypeHeaderValue("application/octet-stream");
        response.Content.Headers.ContentLength 
                = FileProvider.GetLength(fileName);
        return response;
    }
}

WebAPIConfig

config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{filename}",
                defaults: new { id = RouteParameter.Optional }
            );

1 个答案:

答案 0 :(得分:3)

默认情况下,IIS会阻止访问它无法识别的任何文件类型。如果URL中包含点(。),则IIS会假定其文件名并阻止访问。

要允许IIS站点上的URL中的点(可能是MVC路由路径中的域名/电子邮件地址/等),您必须进行一些更改。

快速修复

一个简单的选择是将/附加到末尾。这告诉IIS它是一个文件路径而不是文件。

-(void)nextview:(UIButton *)button { NSIndexPath *index=[tableview indexPathsForSelectedRows]; orderid=[NSString stringWithFormat:@"%@",[[arrDictionary objectAtIndex:index]objectForKey:@"orderid"]]; NSLog(@"orderid==%@",orderid); } 变为http://localhost:49932/api/simplefiles/1.zip

但是,这并不理想:手动输入URL的客户可能会忽略前导斜杠。

您可以通过添加以下内容告诉IIS不要打扰您:

http://localhost:49932/api/simplefiles/1.zip/

点击此链接:http://average-joe.info/allow-dots-in-url-iis/