如何确保action类参数不为null

时间:2015-11-19 16:11:40

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

鉴于以下代码:

public CollectionResult<SetupsDetailsModels> GetSetupsDetails([FromUri]SetupsDetailsCollectionFilterMapping filter)

如果请求不包含任何查询参数,则filter对象始终为null,如何确保即使没有发送任何始终创建实例的参数?

一种简单的方法是添加一个Message Handler并添加一个虚拟查询字符串参数,该方法总是创建对象,但我真的不喜欢这个解决方案。

由于

3 个答案:

答案 0 :(得分:1)

即使使用动作过滤器,您仍然需要将其添加到您需要的所有方法中。或者,您可以使用默认参数。

public CollectionResult<SetupsDetailsModels> GetSetupsDetails([FromUri]SetupsDetailsCollectionFilterMapping filter = new SetupsDetailsCollectionFilterMapping())

答案 1 :(得分:0)

我在Web API Parameter Binding return instance even without request parameters

找到了这个想法

这就是我要做的:

<form action="/admin/banners/adicionar" method="POST" enctype="multipart/form-data">
    <div class="form-group">
        <small>Imagens de até 1024x768</small>
    </div>
    <div class="form-group">
        <label for="selecionar_imagem">Selecionar Imagem</label>
        <input type="file" name="imagem" required/>
    </div>
    <hr/>
    <div class="form-group">
        <button class="btn btn-primary pull-right">Adicionar</button>
    </div>
</form>

答案 2 :(得分:0)

您可以将其设置为路线的默认值:

            routes.MapRoute(
                name: "test",
                url: "{controller}/{action}/{filter}",
                defaults: new { controller = "Home", action = "Index", filter = new SetupsDetailsCollectionFilterMapping() }
            );

如果filter为空,则会创建SetupsDetailsCollectionFilterMapping的新实例,否则它将是您通过的filter

可以省去您必须完成所有方法并添加操作过滤器。

只是用类似的东西测试它并且它有效。