我找不到使用MVC Core下载文件的参考.
我们有一个exe文件供会员从我们的网站下载.过去我们已经把
<a href=(file path)> Download < /a>供我们的用户点击.我想在MVC Core中做同样的事情
<a href=@ViewData["DownloadLink"]> Download < /a>
Run Code Online (Sandbox Code Playgroud)
使用下载链接填充文件路径.
public class DownloadController : Controller
{
[HttpGet]
public IActionResult Index()
{
ViewData["DownloadLink"] = ($"~/Downloads/{V9.Version}.exe");
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
`
链接<a href=@ViewData["DownloadLink"]> Download < /a>获取正确的路径,但单击时仅在地址栏中呈现路径.有没有简单的方法来设置下载链接?
此表正确填充@device.DeviceId但未传递@device.DeviceId给控制器操作.
<table border="1" cellpadding="10">
@foreach (var device in @Model.Devices)
{
<tr>
<td>@device.DeviceId</td>
<td>@device.DeviceName</td>
<td>
<a asp-action="DeleteDevice"
asp-controller="Device"
asp-route-id="@device.DeviceId" asp->
Delete
</a>
</td>
</tr>
}
</table>
Run Code Online (Sandbox Code Playgroud)
控制器动作签名是
public async Task<IActionResult> DeleteDevice(int deviceId)
Run Code Online (Sandbox Code Playgroud)
调用该操作但deviceId= 0.
如何确保@device.DeviceId正确传递给操作?
我正在尝试使用MVC6 Tag Helpers创建CountryCode和CountryName的下拉列表,以便用户在注册后可以选择他们的国家/地区.到目前为止,视图的相关部分看起来像这样
<form asp-controller="Manage" asp-action="EditCountry" asp-route-returnurl="@ViewData["ReturnUrl"]">
<div asp-validation-summary="ValidationSummary.ModelOnly" class="text-danger"></div>
<select asp-for="CountryCode" asp-items="@Model.Countries"></select>
Run Code Online (Sandbox Code Playgroud)
viewmodel的相关部分看起来像这样
[Display(Name = "Country")]
public string CountryCode { get; set; }
public IEnumerable<Country> Countries { get; set; }
Run Code Online (Sandbox Code Playgroud)
国家看起来像这样
public partial class Country
{
[Key]
public string CountryCode { get; set; }
public string CountryName { get; set; }
public virtual ICollection<ApplicationUser> Users { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制器将视图模型返回国家/地区列表
var model = new IndexViewModel
{
CountryCode = user.CountryCode,
Countries =_customersContext.Countries.OrderBy(c=>c.CountryName),
};
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
但在视图中asp-items="@Model.Countries"有一个波浪形 …
从使用个人用户帐户的ASP.NET 5 Web应用程序模板开始,我已设法使用Microsoft帐户进行外部身份验证.当用户点击登录,他们将被重定向到ExternalLogin在AccountController这样的
<form asp-controller="Account" asp-action="ExternalLogin" method="post" asp-route-returnurl="@ViewData["ReturnUrl"]" class="nav navbar-right">
<button type="submit" class="btn btn-null nav navbar-nav navbar-right" name="provider" value="Microsoft" title="Log in"><span class="fa fa-sign-in"/> Log In</button>
</form>
Run Code Online (Sandbox Code Playgroud)
这让他们使用他们的Microsoft帐户登录,所有似乎都运行良好.但是,如何拦截直接尝试访问特权操作[Authorize]
以便将用户重定向到ExternalLogin?可以设置默认操作Startup.cs吗?
编辑1尝试遵循我CustomAutorizationFilter在Filters文件夹中创建的@Yves的建议.它不会检查任何条件
public class CustomAutorizationFilter : IAuthorizationFilter
{
public void OnAuthorization(Microsoft.AspNet.Mvc.Filters.AuthorizationContext context)
{
//if (...) // Check you conditions here
//{
context.Result = new RedirectToActionResult("ExternalLogin", "Account", null);
//}
}
}
Run Code Online (Sandbox Code Playgroud)
并编辑ConfigureServices如下
services.AddMvc(config =>
{
config.Filters.Add(typeof(Filters.CustomAutorizationFilter));
});
Run Code Online (Sandbox Code Playgroud)
当我在本地运行应用程序时,它不再进入主页.它返回一个空白http://localhost:52711/Account/ExternalLogin
显然有很多我不明白. …
entity-framework-core asp.net-core-mvc asp.net-identity-3 asp.net-core
我们有一个使用Asp.Net Identity的Asp.Net 4.5 MVC应用程序来管理我们的客户数据库.我们目前正在使用Microsoft帐户身份验证.我们正在考虑使用OpenId Connect,以便拥有工作/学校帐户的客户也可以登录添加登录到.NET MVC Web应用程序.
Microsoft Account Authentication返回ProviderKey作为已登录用户的唯一ID.这将映射到我们的客户数据库中的UserId.
OpenId Connect似乎没有返回ProviderKey,但NameIdentifier看起来很有希望
ClaimsPrincipal.Current.FindFirst(System.IdentityModel.Claims.ClaimTypes.NameIdentifier)?.Value;
是NameIdentifierOpenId Connect返回的用户的唯一标识符吗?是否可以可靠地用于随着时间的推移唯一地识别用户?
asp.net-identity azure-active-directory adal openid-connect azure-ad-msal
我们能够保存对父对象的更改,但不会保留对子集合的更改。
我们使用了允许 EF Core 发现关系并正确构建数据库的命名约定。
我正在测试的示例在 db 中有一个带有单个子实体的父实体。我们已将第二个子实体添加到该父实体的 MyChildren 集合中。为什么 SaveChanges 不会将 MyChildren 集合的更新保存到数据库?
public class ParentType
{
public Guid ParentId { get; set; }
public string SomeString { get; set; }
public ObservableCollection<ChildType> MyChildren { get; set; } = new ObservableCollection<ChildType>();
}
public class ChildType
{
public Guid Child { get; set; }
public ParentType MyParent { get; set; }
}
// in the example parentIn is passed with 2 ChildType entities in MyChildren.
public static ParentType SaveMe(ParentType parentIn) …Run Code Online (Sandbox Code Playgroud) 我们如何更改 Windows Store 应用程序的包名称?请注意,我们不想更改应用程序显示名称。
我们已将 UWP 应用发布到 Windows 应用商店。Visual Studio<PublisherName>.<AppName>在包清单中生成了一个包名称。
当我将包清单中的包名称更改为 guid 并发布到商店时,我收到了错误
Invalid package identity name
Invalid package family name
Run Code Online (Sandbox Code Playgroud)
我可以看到商店应用程序与包名称相关联。我们是否必须删除商店应用程序并创建新的提交?
UWP 商店应用程序可以有包名称的 guid 吗?
我们正在尝试在ASP.Net 5项目中使用Microsoft帐户身份验证.我们不需要本地身份验证,也不需要用户名.
在用于Web应用程序的ASP.Net 5模板中,在使用外部提供程序登录后,控件将返回到ExternalLoginCallbackAccountController中.
如果用户未在本地注册,ExternalLoginCallback则将用户返回到注册屏幕.我试图修改ExternalLoginCallback为自动注册新用户,如下所示.
public async Task<IActionResult> ExternalLoginCallback(string returnUrl = null)
{
var info = await _signInManager.GetExternalLoginInfoAsync();
if (info == null)
{
return RedirectToAction(nameof(Login));
}
// Sign in the user with this external login provider if the user already has a login.
var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false);
if (result.Succeeded)
{
_logger.LogInformation(5, "User logged in with {Name} provider.", info.LoginProvider);
return RedirectToLocal(returnUrl);
}
if (result.RequiresTwoFactor)
{
return RedirectToAction(nameof(SendCode), new { ReturnUrl = …Run Code Online (Sandbox Code Playgroud) entity-framework-core asp.net-core-mvc asp.net-identity-3 asp.net-core
我们正在尝试通过扩展 AspNetUsers 将 Identity 3 添加到我们现有的客户应用程序中
public class ApplicationUser : IdentityUser
{
public string BusinessName { get; set; }
public string ContactName { get; set; }
public string CountryCode { get; set; }
public virtual Countries Country { get; set; }
public string AddressLabel { get; set; }
public string Phone { get; set; }
public DateTime? FollowUp { get; set; }
public bool MailingList { get; set; }
public int SubscriptionId { get; set; }
[ForeignKey("SubscriptionId")]
public virtual Subscriptions …Run Code Online (Sandbox Code Playgroud) entity-framework-core asp.net-core-mvc asp.net-identity-3 asp.net-core
当前实体框架核心文档提供了在Windows 10/UWP应用程序中使用SQLite的示例.给出的示例声明了db位置, optionsBuilder.UseSqlite("Filename=Blogging.db");其路径等效Windows.Storage.ApplicationData.Current.LocalFolder.Path于此<packagefolder>\LocalState.将SQLite数据库放入.
我们正在探索将UWP/SQLite用于将业务事务存储在SQLite数据库中的业务应用程序.但是文件夹名称LocalState告诉我,这是存储状态信息的地方,而不是商业交易的长期存储.
还有另一个文件夹<packagefolder>\AppData.这是我们的数据库更合适的位置吗?如果是这样,如何在UWP应用程序中访问它?或者<packagefolder>\LocalState毕竟是一个正确的位置来放置一个用于长期存储业务交易的数据库?
更新Nuget包后会弹出此构建错误.有很多关于错误CS5001的信息,但是关于我能找到的UWP中的这个错误没有任何信息.
错误引用文件夹\ Visual Studio 2015\Repos\MySolution\MyProject\CSC.此文件夹不存在,但它在我的任何其他UWP应用程序中都不存在,并且它们构建得很好.
重建,清理,重启VS,无需修复.
我们有一个使用Template 10的UWP应用。资源在同一解决方案的UWP类库中。当我们运行应用程序时,我们得到错误
{Windows.UI.Xaml.Markup.XamlParseException:无法从“ ms-resource:/// Files / Styles \ ButtonStyle.xaml”中找到资源。
在App.xaml中,我们有
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Styles\Custom.xaml" />
<ResourceDictionary Source="Styles\ButtonStyle.xaml"/>
<ResourceDictionary Source="Styles\ListsStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>
Run Code Online (Sandbox Code Playgroud)
我们遵循了
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ms-appx:///Styles/Custom.xaml" />
<ResourceDictionary Source="ms-appx:///Styles/ButtonStyle.xaml"/>
<ResourceDictionary Source="ms-appx:///Styles/ListsStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>
Run Code Online (Sandbox Code Playgroud)
那么错误是
{Windows.UI.Xaml.Markup.XamlParseException:无法分配给属性“ Windows.UI.Xaml.ResourceDictionary.Source”,因为无法将类型“ Windows.Foundation.String”分配给该类型...
我们还在单独的库中的ResourceDictionary中尝试了该解决方案
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/LibraryName;component/Styles/Custom.xaml" />
<ResourceDictionary Source="pack://application:,,,/LibraryName;component/Styles/ButtonStyle.xaml"/>
<ResourceDictionary Source="pack://application:,,,/LibraryName;component/Styles/ListsStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>
Run Code Online (Sandbox Code Playgroud)
那么错误是
{Windows.UI.Xaml.Markup.XamlParseException:无法从pack:// application:,, / LibraryName; component / Styles / Custom.xaml'找到资源
我们如何在UWP类库中引用ResourceDictionary?
我想使用Null-Conditional运算符来检查SubscriptionExpires下面的属性.
public partial class Subscription
{
[Key]
public int SubscriptionId { get; set; }
public string SubscriberId { get; set; }
public DateTime? SubscriptionExpires { get; set; }
public virtual ICollection<ApplicationUser> Users { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
订阅由返回
var subscription = _customersContext.Subscriptions.Where(s => s.SubscriptionId == user.SubscriptionId).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
但是如果Subscription为null,则Subscription?.SubscriptionExpires返回a null reference exception,所以我们仍然保留旧的
if (subscription != null)
Run Code Online (Sandbox Code Playgroud)
当父对象可以为null时,如何使用Null-Conditional运算符来读取属性?