我正在尝试在本地IIS中部署ASP.NET MVC应用程序。我同时拥有源代码和已发布的版本。但是,发布的版本和我发布源代码时获得的版本均会在执行以下作为Controller一部分的方法时失败:
[HttpPost]
[ValidateAntiForgeryAngular]
public async Task<FileDescription> Save([FromBody]dynamic nameobj)
{
var loggedinUser = await UserManager.FindByNameAsync(User.Identity.Name);
if (loggedinUser == null) throw new HttpResponseException(HttpStatusCode.InternalServerError);
var nameId = nameobj["nameId"].Value;
var document = await StorageManager.SaveDocument(nameId);
if (document == null) throw new HttpResponseException(HttpStatusCode.InternalServerError);
var uploader = document.Accesses.First().User.UserName;
return new FileDescription(uploader, document.doc_name, document.temporary_name, document.doc_data.Length);
}
当执行行var uploader = document.Accesses.First().User.UserName;
并显示以下错误消息时,将发生故障:
“ ExceptionMessage”:“'System.Collections.Generic.HashSet' 不包含“第一”的定义”
“ ExceptionType”:“ Microsoft.CSharp.RuntimeBinder.RuntimeBinderException”
我知道First是HashSet的扩展方法,无法找到。我已经看到类似问题中的错误消息包含以下内容:and no extension method 'XXX' accepting a first argument of type 'XXX' could be found
。
可能是我的设置不寻找扩展方法吗?
我已经广泛搜索了类似问题的答案,并尝试对web.config进行了一些更改,例如指定名称空间。但是,由于发布的版本应该可以正常使用,因此我认为该问题可能与我的IIS配置,.net版本或类似的问题有关。
我的应用程序池.NET CRL版本是v4.0.30319。
编辑:
我的控制器确实使用:using System.Linq;
,并且此方法没有关联的视图,我也可以在其中添加它。
如果按照以下方式更改上传器的类型,则不会发生错误:
Document document = await StorageManager.SaveDocument(nameId);
使用var
是否会强制编译器使用动态对象?