我为我在MVC应用程序中使用的模型编写了一个CustomValidation属性.
它并不复杂,但由于某种原因,我得到一个非常奇怪的NullReferenceException错误.我已经把这个权利剥离到了绝对的最低限度,只是为了试图超越这个.
代码在这里绊倒 if (value != null)
如果我在它上面的行上放置一个断点,那么踩到断点会产生异常.
奇怪的是,我可以value
把它放到一个字符串变量中,我可以看到它是有效的和存在的.
然后我尝试更改if语句以检查该变量是否为null而不是value
ALSO产生错误.
我做错了什么?
从控制器返回的实际错误响应如下.它引用的行是If语句.
<h1>An unhandled exception occurred while processing the request.</h1>
<div class="titleerror">NullReferenceException: Object reference not set to an instance of an object.</div>
<p class="location">TechsportiseOnline.Helpers.CustomValidations+BibValidatorAttribute.IsValid(object value, ValidationContext validationContext) in
<code title="C:\Users\matthew.warr\Documents\Git\Website\TechsportiseOnline\Helpers\CustomValidations.cs">CustomValidations.cs</code>, line 22
</p>
Run Code Online (Sandbox Code Playgroud)
CustomAttribute类
public class BibValidatorAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
value = (string)value;
if (value != null)
{
RaceEntry raceEntry = (RaceEntry)validationContext.ObjectInstance;
var _context = (ApplicationDbContext)validationContext.GetService(typeof(ApplicationDbContext));
var databaseBib …
Run Code Online (Sandbox Code Playgroud) 我正在使用绑定的ViewModel创建一个带有Xamarin Forms的秒表类型应用程序.在代码中,我想要完成的是当在View中按下"Lap"按钮时会触发一个Command,它运行一个方法,该方法应该向对象添加一堆细节,然后将其添加到ObservableCollection中.
我遇到的问题是,"添加"按钮实际上并没有添加到集合中.
我收到错误"System.NullReferenceException:对象引用未设置为对象的实例." 在这条线上
RaceTimings.Add(lap);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?完整代码如下.
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Timers;
using System.Windows.Input;
using TechsportiseApp.Models;
using Xamarin.Forms;
namespace TechsportiseApp.ViewModels
{
public class TimerViewModel : INotifyPropertyChanged
{
public Timer myTimer = new Timer();
public ICommand StartTimerCommand { get; set; }
public ICommand LapCommand { get; set; }
public TimerViewModel()
{
StartTimerCommand = new Command(StartTimer);
LapCommand = new Command(LapButton);
LapPosition = 1;
}
//TimeSpan _elapsedTime;
//public TimeSpan ElapsedTime
//{
// get { …
Run Code Online (Sandbox Code Playgroud) 我使用标准身份开发了一个带有个人用户帐户的 Core 2 MVC 应用程序。MVC 应用程序一切正常。
我正在尝试添加公共 API 并使用 JWT 授权请求。
但是,在尝试授权用户时出现问题。当我向控制器提交请求时,它会将我重定向到我的登录页面,因此响应正文是 HTML。
我需要授权并返回数据(如果令牌无效,则不需要)。
我做错了什么?令牌生成一切正常。
令牌控制器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization;
using TechsportiseOnline.Models.AccountViewModels;
using Microsoft.AspNetCore.Identity;
using TechsportiseOnline.Models;
using System.Security.Claims;
using System.IdentityModel.Tokens.Jwt;
using Microsoft.IdentityModel.Tokens;
using System.Text;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Options;
using TechsportiseOnline.Helpers;
namespace TechsportiseOnline.Controllers
{
[Produces("application/json")]
[Route("api/Token")]
public class TokenController : Controller
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly SignInManager<ApplicationUser> _signInManager;
private readonly IConfiguration _configuration;
private readonly IOptions<JWTSettings> _jwtConfig;
public TokenController(
UserManager<ApplicationUser> …
Run Code Online (Sandbox Code Playgroud) 我的项目中有一个XAML视图和一个视图模型.该项目是一个秒表,按下Lap按钮时,它会向ObservableCollection添加一个对象,该对象在视图中显示为ListView.
在ListView中,我添加了一个按钮来删除其中一个Collection项.它有一个带有"DeleteTimingCommand"绑定的Command和一个带有"Position"绑定的CommandParameter,它是我想用来从集合中删除对象的标识符.
DeleteTimingCommand位于ViewModel构造函数中,并设置为触发一个名为"DeleteTiming"的方法.然后,此方法负责实际删除.
但是,我无法让我的代码完全按下我的DeleteTiming()方法!无论我在哪里设置断点,都没有任何东西可以解决它.我按下按钮,没有任何反应.
有些东西没有正确连接.谁能指出我正确的方向?
XAML
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="TechsportiseApp.Views.Timer" Title="Timer">
<StackLayout VerticalOptions="Start" HorizontalOptions="FillAndExpand">
<StackLayout Orientation="Horizontal">
<Label Text="{Binding ElapsedTime}" HorizontalOptions="FillAndExpand" HorizontalTextAlignment="Center" FontSize="40"/>
<Button Command="{Binding LapCommand}" BackgroundColor="#eca400" IsVisible="{Binding EndVisibility}" Image="Scanning.png" WidthRequest="50" HeightRequest="50"/>
</StackLayout>
<Button x:Name="buttonStart" Text="Start Race" Command="{Binding StartTimerCommand}" IsVisible="{Binding StartVisibility}" />
<Button x:Name="buttonEnd" Text="End Race" Command="{Binding EndTimerCommand}" IsVisible="{Binding EndVisibility}" />
<Button x:Name="buttonSubmit" Text="Submit Results" Command="{Binding EndTimerCommand}" IsVisible="{Binding SubmitVisibility}" />
<BoxView HeightRequest="1" Color="Silver" HorizontalOptions="FillAndExpand" />
<Label Text="YOUR RESULTS" HorizontalOptions="FillAndExpand" HorizontalTextAlignment="Center" FontSize="Small" FontAttributes="Bold"/>
<BoxView HeightRequest="1" Color="Silver" HorizontalOptions="FillAndExpand" />
<ListView …
Run Code Online (Sandbox Code Playgroud) 尝试将JSON字符串(包含多个对象)反序列化为List时遇到一个我不明白的问题。这是JSON。
[
{
"id":2,
"name":"Race 1",
"raceDateTime":"2017-09-02T14:27:39.654",
"raceStartTime":"2017-09-02T14:27:39.654",
"description":"string",
"maxEntries":0,
"currentEntries":0,
"status":0
},
{
"id":3,
"name":"Race 2",
"raceDateTime":"2017-09-02T14:27:39.654",
"raceStartTime":"2017-09-02T14:27:39.654",
"description":"string",
"maxEntries":0,
"currentEntries":0,
"status":0
},
{
"id":4,
"name":"Race 3",
"raceDateTime":"2017-09-02T14:27:39.654",
"raceStartTime":"2017-09-02T14:27:39.654",
"description":"string",
"maxEntries":0,
"currentEntries":0,
"status":0
},
{
"id":5,
"name":"Race 4",
"raceDateTime":"2017-09-02T14:27:39.654",
"raceStartTime":"2017-09-02T14:27:39.654",
"description":"string",
"maxEntries":0,
"currentEntries":0,
"status":0
}
]
Run Code Online (Sandbox Code Playgroud)
然后,我有与我的模型匹配的JSON参数。
public class RaceModel
{
public int id { get; set; }
public string name { get; set; }
public DateTime raceDateTime { get; set; }
public DateTime raceStartTime { get; set; } …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的Core 2项目中创建一个valdiation属性.它需要根据数据库中保存的现有值列表验证该值.
下面的代码不起作用,它无法访问数据库上下文.
任何想法为什么/如何纠正?
public class BibValidatorAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(
object value, ValidationContext validationContext)
{
RaceEntryViewModel raceEntry = (RaceEntryViewModel)validationContext.ObjectInstance;
ApplicationDbContext _context = new ApplicationDbContext();
var dbraceEntry = _context.RaceEntries.FirstOrDefault(c => c.Id == raceEntry.Id);
if(raceEntry.BibNumber != dbraceEntry.BibNumber)
{
if (value != null)
{
var raceentries = from r in _context.RaceEntries
select r;
var mycount = raceentries.Count(c => c.BibNumber == raceEntry.BibNumber);
if (mycount != 0)
{
return new ValidationResult("The bib number entered already exists");
}
else
{
return ValidationResult.Success; …
Run Code Online (Sandbox Code Playgroud)